Flori Geschrieben 21. November 2006 Geschrieben 21. November 2006 Hallo zusammen, ich habe mal eine relativ grundlegende Frage zum objektorientierten Ansatz in PHP... Bislang habe ich eigentlich nur Beispiele gesehen, wo in der PHP-Datei im oberen Teil die Klasse mit ihren Methoden definiert wurde und dann quasi "am Ende" diese Methoden der Klasse benutzt werden, d.h. direkt innerhalb der einen Datei ein Objekt generiert wird. Meine Frage bezieht sich nun darauf, ob man sowas in PHP auch trennen kann, d.h. zum Beispiel: 1. ich definiere pro Klasse jeweils eine Datei, z.B. "klasse1.class.php", "klasse2.class.php" 2. ich möchte diese Klassen nun in verschiedenen PHP-Skripten verwenden. Und gerade zum Punkt "2." ist nun die Frage wie ich da dann die Verbindung schaffen kann?? Habe ich nur die Möglichkeit das über ein "include ("klasse1.class.php");" zu machen oder gibt es bei der OOP in PHP da auch andere Möglichkeiten, die Klassen übergreifend bekannt und verwendbar zu machen? Sucht vielleicht sogar das Skript, das letztlich ausgeführt wird, selbst nach den dort aufgerufenen Klassen, z.B. erwartet das Skript vielleicht, daß die Klassen-Dateien im gleichen Verzeichnis wie das Skript selbst liegen? Oder gibt es sowas wie einen "classpath" wie bei Java auch bei PHP? Wie sähe eine Trennung der Inhalte von Klasse und ausführendem Skript bzw. dann Aufruf einer Klasse, die in einer externen Datei definiert ist möglichst professionell aus? Oder ginge es tatsächlich nur mittels der Schlüsselworte "include" oder "require"? Über Beispiele oder erklärende Ausführungen würde ich mich sehr freuen! Vielen Dank bereits an dieser Stelle @all ! Grüße Flori Zitieren
etreu Geschrieben 21. November 2006 Geschrieben 21. November 2006 Im Endeffekt läuft es auch ein require() hinaus. Jedoch bietet PHP5 eine etwas komfortablere Lösung: PHP: Autoloading - Manual Sonst müsste man in jeder Klasse(ndatei) alle anderen Klassen(dateien) einbinden, die man in dieser Klasse benutzt. Eine Klasse(ndatei) ist auch nur eine PHP-/Include-Datei. Also kannst sie in andere Dateien einbinden und dort benutzen. Zitieren
Aiun Geschrieben 22. November 2006 Geschrieben 22. November 2006 ich empfehle das du dir eine Factory-Klasse schreibst, die für dich die Objekte erzeugt und dann automatisch die Dateien included, falls benötigt. Auf diese Weise bist du flexibler mit Parametern und Warnungen. (z.B. welche Datei/Klasse included werden soll ist abhängig von einer anderen Variable oder du willst ein Singleton-Pattern unsw.) Zitieren
Flori Geschrieben 23. November 2006 Autor Geschrieben 23. November 2006 Vielen Dank für die Antworten! Habe zwischenzeitlich mal in ein paar mit PHP geschriebene Anwendungen geschaut (u.a.das CMS Joomla) und dort gesehen, daß dort auch mit Klassen gearbeitet werden, die jeweils über require() eingebunden werden, wenn auch über mehrere PHP-Dateien ineinander verschachtelt. Damit werde ich wohl zunächst auch diesen Weg wählen. Die Sache mit der Factory-Klasse ist mir erstmal ziemlich neu, allerdings sicher ein Hinweis nach dem ich mal googeln werde. Bin ja immer offen für neues. Grüße Flori Zitieren
geloescht_JesterDay Geschrieben 24. November 2006 Geschrieben 24. November 2006 ...die jeweils über require() eingebunden werden, wenn auch über mehrere PHP-Dateien ineinander verschachtelt. Damit werde ich wohl zunächst auch diesen Weg wählen. Du solltest dabei aufpassen, dass deine Dateistruktur so klar ist, dass die Einbindungen in die Dateien schon sehr klar sind. Also jede Klassendatei vielleicht eine (oder auch mehrere) klar definierte Dateien braucht und die eben auch an einen definierten Ort liegen müssen bzw. die Laufzeitumgebung klar ist und somit nicht jede Datei eine Config-Datei o.ä. mit einbinden muss. Außerdem bietet sich hier auch ein require_once() (bzw. include_once) an, da es bei mehrfachem einbinden derselben Datei sonst zu Fehlern kommen kann. Zitieren
Eupinkepank Geschrieben 29. November 2006 Geschrieben 29. November 2006 Mach das einfach so... Nehmen wir an, Du hast diese Klassen: person() auftrag() nun solltest Du die Klassen in dieser Form auf dem Server speichern: class.person.php class.auftrag.php Setze nun an den Anfang eines Skripts, welches Klassen benötigt, einfach folgende Funktion: function __autoload($class_name){ include "class.$class_name.php"; } [/PHP] PHP wird nun die jeweilige Klasse selbst inkludieren wenn sie benötigt wird. Du musst Dich um nix mehr kümmern. Zitieren
Flori Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 I see...! Da sage ich nochmal "Dankeschön!" an JesterDay und Eupinkepank. Das mit dem "require_once()" hatte ich schon in den erwähnten Beispielen gesehen, die ich mir schon mal angeschaut hatte. Die "function __autoload" hatte ich noch nich gesehen, klingt auch sehr interessant und auch praktisch, wenn das automatisiert werden könnte. Wie ich gesehen habe ist es seit PHP 5 mit dabei. :cool: Kurzum: Man lernt nie aus - echt super, dass es dieses Forum hier gibt! :uli Grüsse Flori 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.