AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[PHP] Klassen oder Funktionen?

Ein Thema von TheMiller · begonnen am 9. Jan 2008 · letzter Beitrag vom 9. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

[PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 15:06
Hallo,

ich habe mal eine generelle Frage zu Klassen und Funktionen:

Ab wann macht es Sinn, eine Klasse zu erstellen und Funktionen in eine Klasse auszulagen? Bei einigen Fällen ist es ja relativ klar, wie zB bei einer eMail-Klasse oder so. Ich weis auch nicht, wie ich die Frage so richtig formulieren soll. Mal ein Beispiel:

Einige Leute sind der Meinung, dass man Datenbankoperationen in eine Klasse packen sollte, da diese Funktionen oft genutzt werden. Nun gut, sie erstellen also eine Klasse, in der sie die Verbindung aufbauen, Fehler ausgeben und noch andere Operationen ausführen lassen. Das gleiche aber könnte ich auch in einer Funktion nach dem Schema machen:

Code:
function conncet(user, pw, host)
{
 ...
 $hatfunktioniert = [ergebnis];
 return $hatfunktioniert
}

function delete(..)
{
 ...
}

function disconnect(..)
{
 ..
}
Gut, Klassen sind schon OOP - aber wie oft oder in welchen Zusammenhängen ist das in PHP wirklich um einiges besser zu gebrauchen, als Funktionen?

Ich hoffe ihr wisst (wenigstens) so halb, was ich meine und könnt mir da ein bissl helfen

Danke
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#2

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 15:14
Also es macht schon sehr sinn, wie ich richtig verstanden habe willst du damit emails ( also die ImapFunktionen ) bearbeiten. Dies kannst du mit einer Klasse ganz einfach lösen. Du speicherst eifnach den imap stream, den du mit imap_connect erhälst ein einer private variable ab.

Wenn du nur die Funktionen gruppieren willst, kannst du sie ja eifnach alles statisch machen !?!

Code:
class MyClass {

    public static function MyStaticFunktion($Param1){
        echo 'Hihi: '.$Param1;
    }
}


//Aufruf
MyClass::MyStaticFunction('Das ist lustig!');
Aber das mit dem static , publicund private ist erst ab php 5 vorhanden.

Noch nen paar links:
http://www.php.net/manual/de/language.oop5.php
http://www.php.net/manual/de/ref.imap.php


MfG Desmu...

Endlich kenn ich mich mal mit was aus... nich wie bei delphi^^
Lars
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 15:21
Hi,

naja, so ganz hast du mich nicht richtig verstanden. Ich möchte keine eMail-Funktion etc in Klassen auslagern. Bleiben wir mal bei dem Beispiel mit der DB-Verbindung.

Wieso sollte man das in eine Klasse auslagern und wo ist da Vorteil gegenüber Funktionen, die die Datenbankoperationen durchführen? Oder in meinem PHP-Buch steht ein Beispiel mit Autos (Marke, PS, Bremsen etc...) Wieso macht man fir diese "Funktionen" eine Klasse. Warum nehme ich nicht "function Bremsen()", sondern erstelle ein Objekt und sage diesem, dass es bremsen soll.

Oder macht eine Klasse nur dann Sinn, wenn ich mehrere gleiche Objekte habe (mehr als 2 Autos)? Dann wäre es aber mit dem Beispiel der DB-Verbindung unlogisch...
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 15:29
Der OO Ansatz dient alleine schon der Übersicht. Ich gebe zu, mit PHP hab ich eigentlich noch nie gross mit Klassen gearbeitet, weil die PHP Skripte meist in Verbindung einer Webseite laufen und somit die Lebensdauer der Objekt recht kurz ist... Aber angenommen du 2 Autos (A und B), und beide sollen bremsen. Dann hast du 2 Möglichkeiten:

Objektorientiert:
AutoA.Bremse ;
AutoB.Bremse ;

oder prozedural:
Bremse(AutoA) ;
Bremse(AutoB) ;

Soweit kannst du also alles drehen wie du's willst... Der A**** bleibt halt immer hinten

Wenn aber jetzt durch das Bremsen eines Autos eine Eigenschaft des Autos gesetzt werden soll (z.B. Steht=true), wie willst du das denn im 2. Fall machen. Spätestens dann müsstest du für all deine Autos zusätzliche globale Variablen anlegen, welche definieren, ob dein Auto steht. Im OO Aspekt setzt du einfach eine Property deiner Instanz. Du bleibst damit wesentlich übersichtlicher und flexibler (Vererbung und so Sachen sind ja bislang noch gar nicht berücksichtigt)
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 15:35
Ok das stimmt.

Schönes Beispiel *g* Danke.

Aber Klassen machen keinen Sinn, wenn immer nur 1 Objekt benötigt wird. Da ist es doch besser, Funktionen und Variablen zu benutzen? Zb, wenn wir jetzt zB eine Blog-Seite schreiben. Da haben wir Funktionen, da doch keine 2 Blog-Objekte instantiiert werden, oder? Wie sieht' mit der DB-Verbindung aus... macht das da Sinn?
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 16:05
Dein Blog Beispiel passt ja hervorragend... Natürlich hast du, zumindest jetzt, nur einen Blog. Aber was, wenn du morgen einen weitern willst. In der OO bist du da prinzipiell besser beraten.

Aber bleiben wir mal bei einem Blog. Der besteht doch aus mehreren Einträgen, welche an den gleichen Blog gehaftet sind. Dafür sollte jeder Eintrag als ein einziges Objekt dargestellt werden. Der Blog selbt beinhaltet dann, neben Blog spezifischen Eigenschaften wie Farbe, dann eine Liste aller Blogeinträge. Willst du den Blog darstellen, dann rufts du eine Methode
Code:
Blog.Show (from, til)
auf. Die Show Methode geht die Blog eigenen Einträge durch (z.B. als Collection vorliegend), prüft ob der Blogeintragsdatum innerhalb der Grenzen liegt
Code:
Blog.Items[i].Date betwenn from and til
und zeigt das Teil an:
Code:
print Blog.Items[i].Subject ;
Natürlich kannst du das auch anders lösen. Aber Murphy sagt, dass immer wieder Änderungen in deinem Blog eintreten werden. Zum Beispiel braucht es irgendwann eine Methode um die Einträge eines bestimmten Authors anzzuzeigen. OO gehst du hin, erstellst in der Blog-Klasse eine neue Methode (oder leitest sogar eventuell von der Blogklasse eine neue ab).
Code:
Blog.ShowFromAuthor(author)
geht dann wieder die Kollektion durch, prüft ob der Autor des Eintrags stimmt
Code:
if Blog.Item[i].Author == author
und wenn ja, so zeigst du den Beitrag an.

Dein Beispiel mit der DB Verbindung musst du mal etwas präzisieren. Aber prinzipiell hast du Recht, dass du gewisse Problematiken siehst bei der Gegenüberstellung tabellerarischer Daten (Datenbank) und einer dazu passenden objektorientierten Modellierung... Das ist nicht immer trivial, spätestens dann nicht mehr, wenn Relationen zwischen deinen Daten ins Spiel kommen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 16:20
Das passt ja jetzt noch besser:

Wieso nehme ich keine Funktionen für den Blog? Ich habe auf der Homepage 3 Seiten, die sich auf den Blog beziehen und auch nur einen Blog und Beiträge, die nicht miteinander interagieren, also würden es Funktionen doch auch tun.

Ich scheine mich da vielleicht generell ein bissl Stur stellen - das ist keine Absicht. Ich verstehe OOP bei Delphi, da haben Objekte lange Lebenszeit und müssen miteinander was tun (Listeneinträge verschieben etc...)

Klassen in PHP würde ich persönlich verwenden, wenn ich auf einer gesamten Homepage immer wieder spezielle Funktionen brauche, bei denen Variablen vordefiniert sind. Zum Beispiel beim Versenden von eMails oder so. Aber gerade bei so Sachen wie Blogs, Profile oder so würde ich die benötigen Funktionen in eine Funktions-PHP schreiben und dann verwenden. Diese Seite wird ja im Prinzip auf ganz wenigen Seiten einer HP benötigt.

Wie soll ich es beschreiben. Wieso sollten für Blogs oder Foren Klassen besser geeignet sein, als Funktionen?
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 16:39
Zitat von DJ-SPM:
Wie soll ich es beschreiben. Wieso sollten für Blogs oder Foren Klassen besser geeignet sein, als Funktionen?
Ich hab ja auch schon geschrieben, dass das Objektverhalten bei PHP Webprogrammierung sicherlich unterschiedlich zu dem in Delphi ist.

Aber in der OOP bleibst du einfach flexibler in der Programmierung, und kannst viel klarer trennen, was wofür steht. Und die Wiederverwendbarkeit nicht zu unterschätzen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#9

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 16:43
Ok, ich denke, ich habe es verstanden. Ich entschuldige mich für dieses permanente Argumentieren, aber ich habe es vorher nicht so recht verstanden, wann man genau Klassen nutzt. Das "Negativ-Argumentieren" kommt wahrscheinlich aus dem Studium (Jura)...

Danke
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: [PHP] Klassen oder Funktionen?

  Alt 9. Jan 2008, 16:44
Die Diskussion ist ja ok! Das macht ihr Juristen doch am liebsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz