Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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.)

Geschrieben

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

Geschrieben
...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.

Geschrieben

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.

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...