2012-04-03 18 views
0

B.php:PHP, Klasse innerhalb der Klasse, Fehler?

class B 
    { 
    function show() { echo 'works'; } 
    } 

A.php

class A 
{ 

public static function defineB() 
{ 
    include "b.php"; 
} 

} 


A::defineB(); 
$b = new B; 
var_dump($b); 

Objekt (B) # 1 (0) {},

wenn ohne A :: defineB(); - Fataler Fehler: Klasse 'B' nicht gefunden, wenn Klasse definieren, ohne eine andere Datei hinzuzufügen - Schwerwiegender Fehler: Klassendeklarationen dürfen nicht geschachtelt sein,

ist es ein Fehler?

+0

Es ist ein Bug, aber nicht in PHP. Sie können Klassendeklarationen nicht verschachteln, wie die Fehlermeldung sagt. – JJJ

+1

möglich Duplikat von [ist es erlaubt, eine PHP-Klasse innerhalb einer anderen Klasse zu erstellen] (http://stackoverflow.com/questions/1583140/is-it-allowed-to-create-a-php-class-inside-another- Klasse) – JJJ

+0

Welche Version von PHP verwenden Sie? Bei [dieser Frage] (http://stackoverflow.com/questions/2608432/php-nested-classes-work-sort-of) sollte dies funktionieren, da 'include()' Klassen im globalen Namespace enthält. – CodeCaster

Antwort

3

Es ist kein Fehler, es ist Standard und korrektes Verhalten.

Sie sollten Dateien einschließen, bevor Sie sie verwenden. Wenn Sie zu viel Schmerzen haben, können Sie am Anfang des Codes http://www.php.net/manual/en/language.oop5.autoload.php oder http://www.php.net/manual/en/function.spl-autoload-register.php verwenden.

+0

Wenn es kein Fehler ist, warum habe ich keinen Fehler - Fataler Fehler: Klassen-Deklarationen dürfen nicht verschachtelt sein? Warum funktioniert Code? –

0

In PHP können Sie keine Klassen verschachteln (wie in Java) - Sie haben also "Klassendeklarationen dürfen nicht verschachtelt sein". Das Schlüsselwort ist Namensraum. Das Einschließen der Klasse B von der Methode der Klasse A hat keinen Einfluss auf den Namen der Klasse A, die immer noch ... "A" und nicht "B \ A", "B.A" oder etw. :)

Verwandte Themen