PHP Geschachtelte Klassen funktionieren ... irgendwie?

8

Also, wenn Sie versuchen, eine geschachtelte Klasse wie folgt zu machen:

%Vor%

Sie erhalten einen Fehler Fatal error: Class declarations may not be nested in [...]

Aber wenn Sie eine Klasse in einer separaten Datei haben wie:

%Vor%

Also, warum funktioniert der zweite hackige Weg, es zu tun, aber die nicht-hacky Art, es zu tun, funktioniert nicht?

    
SeanJA 09.04.2010, 14:53
quelle

3 Antworten

18

Aus dem Handbuch ( Ссылка ):

  

Wenn eine Datei enthalten ist, geben Sie den Code ein   contains erbt den Variablenbereich   der Linie, auf der die enthalten sind   tritt ein. Alle Variablen verfügbar unter   diese Zeile in der aufrufenden Datei wird sein   verfügbar in der aufgerufenen Datei, von   dieser Punkt nach vorne. Allerdings alle   Funktionen und Klassen definiert in der   enthaltene Datei hat den globalen Gültigkeitsbereich.

    
Tom Haigh 09.04.2010, 14:58
quelle
1

Der zweite Weg besteht nicht in der Verschachtelung von Klassen. Sie haben nur Ihre beiden Deklarationen in einer Datei, die sich von Ihrem ersten Beispiel unterscheidet. In PHP können Sie mehrere Klassendeklarationen in einer Datei haben, eine organisatorische Entscheidung ist keine Voraussetzung.

    
Ivo Sabev 09.04.2010 14:54
quelle
1

Es gibt keinen guten Grund, eine Klasse innerhalb einer Methode zu definieren. Der zweite Weg "funktioniert" nur in dem Sinne, dass er keinen Fehler auslöst - die Klasse existiert immer noch im gleichen Bereich / Namespace wie alle anderen definierten Klassen. Sie verschachteln also in diesem Szenario keine Klasse.

Übrigens, der Grund dafür ist, dass eine Klasse nur eine Definition ist - es gibt keine Ausführung bei der Definition einer Klasse. Daher wird diese Datei (e.php) geparst, sobald Sie sie einschließen, und dann wird ihre Klasse für den aktuellen Ausführungskontext verfügbar. Nur die ausführbaren Teile des Codes (d. H.% Co_de%) gehören tatsächlich zum Gültigkeitsbereich des Aufrufers.

    
Peter Bailey 09.04.2010 14:58
quelle

Tags und Links