PieDie Geschrieben 29. März 2007 Autor Geschrieben 29. März 2007 Dem PieDie wurde geholfen und nun kann er loslegen. Aber sowas von Sag nochmal einer, in Foren wird nur Sch**ss erzählt Zitieren
Eupinkepank Geschrieben 29. März 2007 Geschrieben 29. März 2007 ? Wie jetzt? Noch immer Fragen? Zitieren
forTeesSake Geschrieben 29. März 2007 Geschrieben 29. März 2007 Wenn das dann so geschehen ist, würde ich mir das gesamte Programm erneut vornehmen und es auf OOP umstellen. Ich würde gerne mal wissen, was genau dieser Satz zu bedeuten hat. Ich bin nun seit ich PHP lerne immer wieder über den OOP Ansatz gestolpert, finde aber nichts, aber auch rein gar nichts im Netz, wo man mal an einem kleinen Beispiel (ein Mini-Projekt) sehen kann, wie genau man OOP programmiert. Ich nutze selbst mittlerweilen auch schön Klassen und Methoden und das Ganze, trotzdem heisst das ja noch lange nicht, dass ich dadurch Design und Programm trenne. Kann mir denn jemand mal ein Beispiel für ein überschaubares OOP PHP Projekt geben, dessen Quellcode öffentlich ist? Am besten ein Tutorial, denn das fertige Projekt zu überschauen fällt anfangs sehr schwer... (TYPO3 ist ja auch OOP, aber das ist mir für den Anfang einfach zu gross) Zitieren
PieDie Geschrieben 29. März 2007 Autor Geschrieben 29. März 2007 ? Wie jetzt? Noch immer Fragen? Noes, alles prima Zitieren
geloescht_JesterDay Geschrieben 29. März 2007 Geschrieben 29. März 2007 Ich nutze selbst mittlerweilen auch schön Klassen und Methoden und das Ganze, trotzdem heisst das ja noch lange nicht, dass ich dadurch Design und Programm trenne. Das heißt es auch nicht. OOP und Trennung von Design und Layout sind 2 Paar Schuhe. OOP heißt einfach, dass du nicht einen langen Programmcode hast und auch nicht den code in viele Funktionen aufgeteilt, sondern dass die Funktionen nochmal in Objekten gekapselt sind. Durch diese Kapselung erreichst du, dass du Teile des codes ändern oder komplett ersetzen kannst ohne das dadurch der Rest vom Programm in mitleidenschaft gezogen wird (im Idealfall, natürlich muss das nicht immer zwangsläufig so sein). Im großen Und ganzen kannst du das auch erreichen, wenn du das über die aufteilung in Funktionen machst (wie in meinem Beispiel oben). Der Vorteil von Objekten gegenüber reinen Funktionssammlungen ist der, dass ein Objekt eine klar definierte Sammlung ist, die eine bestimmte Aufgabe erledigt und außerdem über Properties und Events auf bestimmte Dinge und eingaben reagieren kann. Ok, bei PHP ist das mit den Properties und Events so ne Sache. Gibt es das eigentlich schon? Es ist kein muss alles OOP zu machen, wenn man es eh schon sauber programmiert hat (eine Funktion für eine bestimmte Aufgabe), aber es ist dann auch kein großer Schritt mehr das per Objekt zu machen. Und eine unbedingte Trennung von Layout und Programm erreicht man damit auch nicht zwangsläufig. Zitieren
forTeesSake Geschrieben 3. April 2007 Geschrieben 3. April 2007 Ich danke Dir für Deine Ausführungen. Ich arbeite erst seit kurzem mit Klassen, aber auch nicht zu 100%. Vieles geht (zurück zum Thema ) einfach über klar getrennte Include-Dateien in denen Funktionen und bestimmte Abläufe aufgeteilt in verschiedenste Bereiche der Anwendung liegen. Je mehr ich drüber nachdenke, desto mehr glaube ich, dass ich schon längst (und vielleicht sogar schon immer) OOP programmiere, nur eben auf Basis von Include Dateien und nicht Objekten... Zitieren
Eupinkepank Geschrieben 4. April 2007 Geschrieben 4. April 2007 Kann mir denn jemand mal ein Beispiel für ein überschaubares OOP PHP Projekt geben, dessen Quellcode öffentlich ist? Am besten ein Tutorial, denn das fertige Projekt zu überschauen fällt anfangs sehr schwer... (TYPO3 ist ja auch OOP, aber das ist mir für den Anfang einfach zu gross) Na logisch können wir das... Es ist aber immer sehr schwer einem OOP Unerfahrenem die Vorteile von OOP anhand eines Mini Tuts nahezubringen... Dennoch mache ich das mal. Aufgabenstellung: Eine HTML Seite, die via OOP den Benutzer anhand von User_ID oder aber User_Name einwandfrei verfiziert. Benötigte Dinge: 1. eine effinziente Entwicklungsumgebung. Ich nutze hier das Zend Studio, da dort die Voteile sehr gut sichtbar werden. 2. Eine Person, die mir das HTML Layout erstellt 3. Eine Person, die den PHP Code in das HTML Gerüst baut 4. Eine Person, die mir mir die Klasse schreibt. Gerade bei kleinen Projekten wird das alles natürlich eine einzige Person machen, aber wir tun mal so, als ob das was riesiges wird. Als erstes legen wir im TZend Sudio ein neues Projekt an. Wir nennen das mal "forTeesSake" Bitte den Screenshot1 betrachten. Hier der monströse HTML Quellcode:) Der ist NICHT W3C Konform und auch sonst nicht doll! <table width="100%" cellpadding="0" cellspacing="5" border="0"> <tr> <td width="50%" align="right" valign="middle"></td> <td width="50%" align="left" valign="middle"></td> </tr> </table> [/PHP] Wir haben also 2 Spalten. Links soll der Nickname oder Username rein, rechts der reale Name mit Anschrift. Nun kommt der Mensch ins Spiel, der den PHP Code in das HTML Gerüst schreibt. Es wurde sich vorher drauf geeinigt, dass die Klasse, die den realen Namen hier anzeigen soll, ganz schlicht "show_user_data" heissen soll. Diese Klasse wurde bereits angelegt, allerdings hat sie bislang keinen Inhalt. Den erzeugen wir jetzt. Schau mal auf screenshot2... Dort siehst Du die Voteile vom Zend Studio... Es bietet dir innerhalb Deiner eigenen Klasse gleich eine Codevervollständigung an und zeigt Dir, welche Variablen überhaupt zur Verfügung stehen und an welcher Stelle die definiert wurden. Das ist gerade bei großen Projekten sehr hilfreich und spart Zeit... Hier mal der vorläufige Programmcode, der in der Datei "class_show_user_data.class.php" abgelegt ist: [PHP] <? class show_user_data{ /* Erstmal hier die Werte definieren, die ausserhalb der Klasse bekannt sein dürfen Diese Werte bezeichnen wir mit "public" */ public $vorname; public $nachname; public $strasse; public $hausnummer; public $plz; public $ort; public $nickname; // Nun die Methode, die uns den reellen Namen auf den Bildschirm zaubert. public function get_real_user_data($user_id,$user_name){ if($user_id>0){ // Wenn eine User_id an die Methode übergeben wurde, suchen wir anhand der ID, weil das schneller geht. // Eine DB Abfrage spare ich mir... ist ja nur ein Beispiel $this->vorname="Max"; $this->nachname="Mustermann"; $this->strasse="Musterweg"; $this->hausnummer="0815"; $this->plz="88888"; $this->ort="Musterhausen"; $this->nickname="max_0815"; } if($user_id<1 && $user_name<>''){ // Gibt es keine User ID, wird anhand des User_name gesucht. $this->vorname="Max"; $this->nachname="Mustermann"; $this->strasse="Musterweg"; $this->hausnummer="0815"; $this->plz="88888"; $this->ort="Musterhausen"; $this->nickname="max_0815"; } } } ?> So.... nun wird die Klasse genutzt um den PHP Code in das HTML Gerüst einzufügen. Jetzt hier der HTML Quellcode: <? function __autoload($class_name){ // Eine tolle Funktion von PHP die immer automatisch die richtige Klasse lädt. include("./classes/class_".$class_name.".class.php"); } // Nun erstellen wir ein neues Objekt! $benutzer= new show_user_data(); // Obekt ist noch leer... nun füllen wir es mit Leben $benutzer->get_real_user_data('18',''); // Wir haben an dieser Stelle nur die User ID.... die reicht aber! // Objekt ist nun befüllt! ?> <table width="100%" cellpadding="0" cellspacing="5" border="0"> <tr> <td width="50%" align="right" valign="middle"><?= $benutzer->nickname ?></td> <td width="50%" align="left" valign="middle"> <?= $benutzer->vorname ?> <?= $benutzer->nachname ?><br> <?= $benutzer->strasse ?> <?= $benutzer->hausnummer ?><br> <?= $benutzer->plz ?> - <?= $benutzer->ort ?><br> </td> </tr> </table> [/PHP] Somit haben wir einen übersichtlichen Quellcode. <?= ist übrigens die Kurzform von "<? echo " Jetzt werden viele sagen: Boah! Ist das umständlich! Ja... das stimmt.... Nun stelle man sich aber vor, es wäre ein monströses Projekt (Online Shop, Forum usw.)... Da ist man auf Übersichlichkeit angewiesen... Nun stelle man sich weiterhin vor, dass sich irgendwas an den Datenbankstrukturen ändert... Es muss in diesem Fall nur die Klasse, nicht aber unsere Index.php angefasst werden. Das macht es sehr einfach spätere Updates zu machen. Seht in einer Klasse einfach eine Blackbox die ihr mit Werten füllt um ein Ergebnis zu bekommen. Was in der Klasse passiert kann euch "*******egal" sein. Zitieren
forTeesSake Geschrieben 4. April 2007 Geschrieben 4. April 2007 Wow! Vielen Dank, das Du Dir da so viel Arbeit gemacht hast! Ich werde mir das mal in Ruhe anschauen und denke, dass das auch vielen anderen den Einstieg erleichtern wird. Danke und :uli Zitieren
geloescht_JesterDay Geschrieben 4. April 2007 Geschrieben 4. April 2007 Kleiner Hinweis: __autoload und die Sichtbarkeit in Klassen (public etc.) gibt es erst ab php 5. Nicht dass du daran verzweifelst, wenn du kein php 5 hast (gerade bei Webhostern ist php5 noch eher selten). Zitieren
Eupinkepank Geschrieben 5. April 2007 Geschrieben 5. April 2007 Wow!! wirklich? Die sollten aber mal Gas geben... So wie es ausschaut kommt in diesem Jahr noch php6! Zitieren
geloescht_JesterDay Geschrieben 5. April 2007 Geschrieben 5. April 2007 Wow!! wirklich? Die sollten aber mal Gas geben... So wie es ausschaut kommt in diesem Jahr noch php6! Gerade im Serverbereich ist man eben nicht immer auf dem neuesten Stand. Da gilt eben: Never change a running System. Debian Etch kommt z.B. bald raus (soweit ich weiß ist noch April geplant, oder?) und hat jetzt erst php 5 dabei, offiziell, in der stable Version. Nicht jeder Server ist wie dein Client, bei dem du halt mal schnell die cutting edge Version raufhaust und wenn er mal 1-2 Tage ausfällt... who cares? Gerade nochmal nachgesehen: Bei meinem Anbieter gibt es php5 nur im größten Paket. OK, bei nem anderen, teuereren Anbieter gibt es in allen Tarifen die php anbieten 4 und 5. Aber auch noch nicht so lang AFAIK. Zitieren
Eupinkepank Geschrieben 5. April 2007 Geschrieben 5. April 2007 Jo... Das mit dem Debian Etch ist schon seit Monaten so ein Hick Hack... Wir haben die Testing Version auf unseren internen Servern und sind damit 100%ig zufrieden. Der Grund warum es noch nicht "stable" ist fällt für den internen Gebrauch nicht ins Gewicht. Aber schon seit der 1. Testing Version im November war php5 dabei. Nun ist php 5.2.irgendwas dabei. Auf php6 freue ich mich richtig... zum ersten mal muss man sich über sicherheitsaspekte (Stichwort Register Globals und open Basedir usw.) keine Gedanken mehr machen, da man das nicht mehr einstellen kann. Das Lesen der seitenlangen Changelogs auf php.net hat richtig spaß gemacht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.