Dies funktioniert nicht:Erweiterte Klasse nicht gefunden, wenn Basisklasse in einer separaten Datei ist enthalten
test.php:
include_once('test-include.php');
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
Test-include.php:
// this does get printed out, so I know the include statement is working
echo 'DEBUG: this is the test-include.php file<br>';
//======================================================================
class Test1 { // test1
var $var = 'a';
}
Es gibt den folgenden Fehler
PHP Fatal error: Class 'Test2' not found in /path/to/test.php on line 8
während dieser
funktionierttest2.php:
// this is in the same position as the include statement in test.php
//======================================================================
class Test1 { // test1
var $var = 'a';
}
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
Warum die Basisklasse nicht setzen (Test1) in einer Include-Datei das Kind Klasse verursachen, die es ist, die sich nicht gefunden werden ? Mit anderen Worten, das erste Beispiel schlägt fehl, da es Test2 nicht finden kann, wenn wir versuchen, es zu instanziieren. Diese Art von Sinn macht Sinn, da wir im Code-Ausführungsablauf noch nicht zu Test2 gelangt sind. Im zweiten Beispiel (ohne die include-Anweisung) gibt es keinen Fehler, obwohl es eine ähnliche Situation ist (die Test2-Klasse wurde noch nicht in der Codeausführung erreicht)
Oh, und dies ist unter Version 5.1.6 .
UPDATE:
OK, Daff korrekt ist - wenn ich
$main = new mainClass();
bis zum Ende in dem test.php Beispiel bewegen, es funktioniert. Ich würde immer noch gerne wissen, warum es nicht funktioniert, wenn die obige Zeile nicht am Ende ist - es funktioniert ganz gut im Beispiel test2.php, das am Ende nicht die $ main = new mainClass() Zeile hat .
UPDATE 2:
OK, ich habe versucht, require, require_once
und include
anstelle von include_once
mit - keines dieser Arbeit. Und ich fügte der test-include.php-Datei auch eine Test-Echo-Anweisung hinzu, die ausgedruckt wird (außerdem erhalte ich keine Fehlermeldung über eine nicht vorhandene Include-Datei), daher weiß ich, dass die include-Anweisung funktioniert.
sind Sie sicher, die umfassen funktioniert? – Rufinus
Wie schlägt es fehl? Kompilierfehler, Ausführungsfehler, kein Fehler, aber falsche Ergebnisse? – Lucky
Was sehen Sie, wenn Sie "require" verwenden? Was siehst du, wenn du "echo" schreibst Dies ist test-include.php '; " am Anfang von "test-include.php"? Ist "test-include.php" im selben Verzeichnis? Ist es in Ihrem Include-Pfad? – GZipp