# OOP mit PHP5



## Pherseus (10. Juni 2005)

Hi, 

 kennt jemand ein gutes script oder tut, das fast komplett mit OOP in PHP5 arbeitet?


----------



## bled (10. Juni 2005)

http://www.tutorials.de/tutorials166160.html

Also ein bischen Suchen hätte da echt nicht geschaded.
Dieses Thema wurde meines Erachtens wirklich schon oft genug durchgekaut...


----------



## Pherseus (10. Juni 2005)

hmm, okay das ist eine erkläreung wie Klassen funktionieren. Das ist mir im großen und ganzen auch durchaus klar. 

 Jedoch suche ich ein komplettes Script, meinetwegen ein Portal, Gästebuch Newssystem, was auch immer, welches fast nur mit Klassen arbeitet. 

 Im Prinzip suche ich etwas das eine Haupklasse hat, in dem dann die einzelnen Unterklassen gestartet werden. Irgendwie sowas. 

 Halt ein Projekt, welches fast komplett mit Klassen arbeitet.

 Ein Script welches einen Db klasse z.B. verwendet, habe ich schon geschrieben das ist nicht das Problem. Nur habe ich mal gehört, dass wenn man wirklich OOP macht, dass dann quasie alles nur noch mit Klassen gemacht wird und es keinen Code mehr ohne Klassen gibt. Sowas suche ich halt, da ich mir derzeit nicht vorstellen kann wie sowas aussieht/aussehn könnte.Ich hoffe das ist verständlich.


----------



## EaStErDoM (26. August 2007)

Also diese Datenbankklasse ist echt alles andere als ein gutes Beispiel. Der Quelltext ist furchtbar formatiert - hält nicht einmal so etwas ordinäres wie den Syntax-Standard ein. Außerdem halte ich es schon für sehr wenig mitgedacht mysql_fetch_array zu verwenden hier wäre wirklich mysql_fetch_object angebracht. Obwohl beides eigentlich eher Geschmacksache ist.

Mit OOP in PHP5 hat die Klasse aber nicht das Geringste zu tun.

Soviel zu "ein bisschen suchen hätt schon gereicht".

Dieser Beitrag ist in den Google-Suchergebnissen nach "OOP in PHP5" ganz oben dabei. Sehr enttäuschend. Vielleicht kann hier doch noch jemand ein paar gute Quellen nennen für Leute die wie ich hier stranden.

Und dem/der Herrn/Frau bled rate ich Beiträge mit ein bisschen mehr Hirn zu lesen, die Antwort is absolut unbrauchbar.


----------



## Dennis Wronka (26. August 2007)

Mit einem komplett OOP-basierten Projekt kann ich nicht dienen, aber mit ein paar Klassen, welche zufaellig auch das PHP5-OOP nutzen (wenngleich ich auch Backports zu PHP4 erstellt habe). Ein paar der Klassen gibt es hier auch als Tutorials.
All meine Klassen sind unter http://php-classes.sourceforge.net zu finden.
Folgende Klassen hab ich auch hier als Tutorials hinterlegt (wobei nicht zwingend die jeweils aktuellste Version hier verfuegbar sein muss):

DirectoryList
FTPConnection
HTTPConnection
eMail
SMTPConnection

Ein Projekt vollstaendig OOP-basiert ist meiner Meinung nach auch Overkill. Es gibt einfach Sachen wo eine simple Funktion einfacher und schneller ist als extra ein Objekt zu instanziieren.
Meine Website arbeitet auch relativ viel mit Klassen, und es wird auch immer mehr; als naechstes steht an meine Klasse SQLSession einzubinden um die Session-Verwaltung in ein Objekt und in die Datenbank zu verfrachten.
Dennoch habe ich eine functions.php die eine Anzahl sinnvoller Funktionen enthaelt die mir das Leben einfacher machen.


----------



## EaStErDoM (26. August 2007)

Gänzlich Klassen is indem Sinn nicht wirklich sinnvoll, da gib ich recht, weil das Verwenden der Klassen "im freien Raum" praktisch is, nur für die Verwendung wieder Klassen zu schaffen, halte ich für hinderlich.

Was OOP5 ausmacht sind vor allem die eingeführten public, private und protected Sachen und die erweiterten Möglichkeiten die diese (angeblich) auftun. Ich persönlich werd auch nie __constructor verwenden, weil ichs hässlich find, und Destruktoren find ich total überflüssig. Und das meine Methoden alle public sind hat mir bisher auch nie geschadet. Ich such irgendwie den Sinn in diesen "Neuerungen".

PS: Eine deiner Klassen kannich gut für eines meiner Projekte brauchen http://sentaqor.berlios.de/ - wie man manchmal auf der Suche nach etwas so schnell ganz was Anderes kriegt, dass man braucht ;-)


----------



## Dennis Wronka (26. August 2007)

EaStErDoM hat gesagt.:


> Was OOP5 ausmacht sind vor allem die eingeführten public, private und protected Sachen und die erweiterten Möglichkeiten die diese (angeblich) auftun.


Auch zu den Unterschieden von OOP in PHP4 und PHP5 hab ich ein kleines Tutorial geschrieben.  Das geht aber hauptsaechlich in die Richtung Backporting von PHP5-Klassen nach PHP4.



EaStErDoM hat gesagt.:


> Ich persönlich werd auch nie __constructor verwenden, weil ichs hässlich find, und Destruktoren find ich total überflüssig.


__construct() und __destruct() find ich eigentlich garnicht so schlimm. Vor allem weiss man gleich womit man zu tun hat. 
Der Destruktor kann manchmal recht sinnvoll sein.
Meine FTP-Klasse verbindet zum Server im Konstruktor und schliesst die Verbindung im Destruktor. Aehnlich sieht es mit meiner SQL-Klasse aus.
Im Destruktor kann man eben noch letzte Massnahmen ergreifen um alles sinnvoll zu beenden. Dies muss man dann eben bei der Programmierung nicht mehr machen weil es Teil der Klasse ist, was meiner Meinung nach sinnvoll ist, denn die Verwaltung der Verbindung zum Server (ob nun FTP oder SQL ist dabei ja egal) ist Aufgabe der Klasse.



EaStErDoM hat gesagt.:


> Und das meine Methoden alle public sind hat mir bisher auch nie geschadet. Ich such irgendwie den Sinn in diesen "Neuerungen".


Sicherlich schadet es nicht, vor allem wenn Du der alleinige Nutzer bist. Ich setze aber gern Methoden auf privat die von aussen nicht genutzt werden sollen/brauchen um eben gleich zu signalisieren dass diese nur fuer den internen Ablauf von Bedeutung ist.



EaStErDoM hat gesagt.:


> PS: Eine deiner Klassen kannich gut für eines meiner Projekte brauchen http://sentaqor.berlios.de/ - wie man manchmal auf der Suche nach etwas so schnell ganz was Anderes kriegt, dass man braucht ;-)


Und welche waere das?


----------



## EaStErDoM (26. August 2007)

War falscher Alarm, dachte die RSS Klasse wäre zum auswerten von Feeds, da sind aber nur drei Methoden drin zum Feed erstellen. Habich schneller reagiert als gelesen 

Hm ja sinvoll beenden, bei einer Datenbank macht das sicher Sinn.

Hab übrigens eine Erklärung gefunden die scheinbar alles enthält: http://www.dynamicwebpages.de/php/language.oop5.php
Gerade bei den komplizierteren Sachen is sie aber zu dünn - wie alles was ich in Bezug zu Interfaces, abstrakten Klassen, Überladung und Iteration find.

Aber diese Doku zeigt mal auf wieviel da wirklich neu is - puh!


----------



## Dennis Wronka (26. August 2007)

Das sieht mir aus wie der Originaltext aus dem PHP-Manual auf php.net. 
Das Manual find ich uebrigens echt gut. Dort findet man eigentlich alles was man so braucht um mit PHP arbeiten zu koennen.

Ich empfehle aber, bei entsprechenden Kenntnissen der englischen Sprache, das englische Original, denn die deutsche Uebersetzung scheint nicht immer auf dem aktuellsten Stand zu sein.
So gab es (ist mein ich mittlerweile behoben) z.B. Unterschiede bei der Seite zu md5(). Seit PHP5 hat md5() einen zweiten, optionalen Parameter erhalten. In der englischen Version fand man diese Info auch, auf der deutschen Seite hingegen wurde die Existenz dieses Parameter vollkommen verschwiegen.


----------



## EaStErDoM (26. August 2007)

Du das is genau der Grund warum ich nicht wusste, dass das die Standarddoku ist - ich verwend nämlich nur die englische, eben weil ich genau dieselbe Erfahrung gemacht habe: in der deutschsprachigen fehlen manchmal Sachen.

Ich muss zugeben suchen tu ich darin auch sehr selten, ich programmiere PHP seit mittlerweile 5 Jahren und kenn was ich brauch zumeist schon und tipp dann einfach in die Adresszeile sowas wie php.net/preg_split und so. Komm mir jetzt schon ein bisschen dumm vor, dass ich nicht daran gedacht habe mir die DE-Doku in Sachen OOP5 vorzunehmen - aber wie du siehst hat sie ja mich gefunden ;-)


----------



## mAu (26. August 2007)

Diese Seite hat mir auch manchmal geholfen: phpBar.de


----------



## maeTimmae (26. August 2007)

Mir entzieht sich irgendwie der Sinn, warum man ein komplett auf PHP5-basierendes Projekt schon vorgesetzt bekommen möchte - Der Lerneffekt wäre irgendwie gleich null.
In Sachen Tutorials finde ich sogar die PHP-Doku sehr aufschlussreich, und wenn mal doch ein Wort unklar ist, wie zB Interface oder Überladungen, kann man auch gerne mal schauen, was C++ Hilfen dazu meinen.

Und damit ich auch noch mit einem Link aufwarten kann, empfehle ich mein Lieblingsframework (made by Zend) - Baut vollständig auf PHP5 auf, ist aber kein vorgefertigtes Projekt. Besonders die View-Klasse hat es mir irgendwie angetan.

Zur Geschichte "public" vs "protected" vs "private": Ich weiß nicht, wie viele Leute das Wort "objektorientiert" ernst nehmen, die alle Eigenschaften eines Objekts publik maskieren, nur weil sie denken, dass eh nur sie darauf Zugriff hätte  Klar ist es einfacher, die Eigenschaften immer direkt, auch von außen, anzuwählen, aber was ist denn, wenn man nun wirklich mal ein paar Änderungen vornimmt, die man durch eine Set- oder Get-Methode viel einfacher und produktiver hätte umsetzen können?
Mal abgesehen davon, dass es im Falle einer einzigen Anwendung des Objekts von einem einzigen Anwender keinen Unterschied macht, ob public oder private, habe ich schon so oft Klassen geschrieben, deren Eigenschaften in einem Resultat enden müssen - Und da überprüfe ich lieber gleich bei der Eingabe, ob diese auch korrekt ist, und forme mir diese so, wie ich es möchte, als das dann final nochmal hin- und herzuschrauben. Einfaches Beispiel: In meiner FileUpload Klasse kann ich ein Ziel-Verzeichnis bestimmen, welches ich über eine passende set-Methode erstmal auf Existenz überprüfe. Das verschafft mir die Möglichkeit, es entweder noch zu erstellen oder eine Exception zu werfen oder eine andere Warnung auszugeben. Gleiches gilt für das Setzen des Dateinamen: Über ein preg_match wird überprüft, ob der gewünschte Dateiname valide ist, ansonsten wird wieder mit Steinen geworfen.
Würde ich das alles von außen über zB $upload->_directory = '/dieses/verzeichnis/existiert/nicht/ setzen, hätte ich beim endgültigen Upload-Befehl einige Probleme, die über den korrekteren Einsatz von OOP umgangen werden können.


----------



## EaStErDoM (26. August 2007)

Ja von dem ursprünglichem Eröffner des Beitrages der das wollte sind wir ja schon thematisch ziemlich abgegangen, ich lerne sowieso ausschließlich praktisch, also kapier ichs meist erst wirklich, wennichs wirklich brauch.

Und was man anderen zugänglich macht und was nicht, muss man sich letztendlich sowieso untereinander ausreden, weil mit den Anforderungen an eine Klasse kommen ihre Methoden.

Und wie du darauf kommst ich würde die Eigenschaften von außen anwählen weiß ich nicht. Ich bin absolut kein Fan davon Variabeln einer Instanz extern direkt zu setzen, ich finde eine gute Klasse liefert für das was sie kann ausdrücklich Methoden die das erledigen.


----------



## tobias_petry (26. August 2007)

Pherseus hat gesagt.:


> Nur habe ich mal gehört, dass wenn man wirklich OOP macht, dass dann quasie alles nur noch mit Klassen gemacht wird und es keinen Code mehr ohne Klassen gibt. Sowas suche ich halt, da ich mir derzeit nicht vorstellen kann wie sowas aussieht/aussehn könnte.Ich hoffe das ist verständlich.



schau dir mal das Zend-Framework mit seinem FrontController und schau mal ob du Beispiel-Anwendungen findest, da hast du wirklich nur noch Klassen, einfach 1a.
wird sich höchstwahrscheinlich auch als Quasi-Standard etablieren und viele Pear-Packages ablösen, zieht ja trotz seinem geringen Alter schon sehr große Kreise.


----------



## Sarah Schüßler (15. Oktober 2007)

Hi!
Ich soll PHP-Skripte überprüfen bzw. "auf PHP5 updaten"(unter Apache und MySQL). Da ich noch ein relativer Anfänger bin: hat jemand einen Tipp wie ich da am besten vorgehe Also wie/vorher ich seh was ich ändern muss, was ich ändern kann, etc(was sind must have und was can have).. Onlinemanuals durchforsten und mich a la "try- and- error"-Prinzip probieren?


----------



## tobias_petry (16. Oktober 2007)

Na als Anfänger wirst du (sry) da eh nix hinbekommen ^^
Und portieren muss man PHP4-Anwendungen auf PHP5 nicht, denn PHP5 ist abwärtskompatibel, einfach einmal alls durchtesten und fertig, hatte bisher nur einmal nen Problem, wo was nicht abwärtskompatibel war, das war aber auch ein dreckiger Code in der Kundensoftware ^^


----------



## Sarah Schüßler (16. Oktober 2007)

Kannst du mir dann kurz erklären oder einen Link geben(habe bereits hier die Suche und google.de beansprucht)was eine "doppelte Funktionsinitialisierung" ist? Ist das praktisch wenn Variablen doppelt initialisiert werden(was man ja nicht sollte)?
Auch steht in der Aufgabenstellung was mit der methode set_doerror: habe dazu mit der Suche und Manuals von PHP nichts gefunden..weiß jemand was es damit auf sich hat? 
Ich soll nämlich die Skripte durchschauen und diese doppelten Initialisierung ausschließen; unter anderem.


----------

