dedlfix: Doppelter Klassenaufruf

Beitrag lesen

Tach!

Gegeben ist eine Klassen-Ressource

Was ist eine Klassen-Ressource? Meinst du eine Datei mit der Klassendefinition darin?

Führe ich in der index.php jetzt aber die Methode barFunction() ein 2. Mal aus, kommt es zu einer Fehlermeldung. [...] // Das führt zu "Fatal error: Cannot declare class Foo, because the name is already in use in … on line 3"

Diese Meldung kommt auch, wenn du sowas schreibst.

require('Foo.php');
require('Foo.php');

Oder wenn du den Code aus der Datei zweimal hintereinander schreibst.

Ich habe darauf intuitiv reagiert und die Instanz der Klasse Foo als private Eigenschaft der Klasse Bar gespeichert.

Das ist aber nicht dasselbe wie dein erster Code. Im ersten Fall wird bei jedem Aufruf eine neue Instanz der Klasse erstellt, in der Ersatzlösung wird dieselbe Instanz wiederverwendet. Das kann sogar eine Verbesserung sein, dass nur eine Instanz erstellt wird, aber je nach Fall auch nachteilig.

Was versuchst du eigentlich zu erreichen, dass du die Klassendatei nicht generell, sondern innerhalb des Funktionsaufrufs inkludierst? Private Klassen gibt es nicht. PHP legt sie auch in dem Fall global an. Das heißt, du kannst das require() oder besser require_once() auch außerhalb von class Bar notieren, zum Beispiel am Anfang der Datei.

dedlfix.