To nie działa:Rozszerzony klasa nie znaleziono, gdy klasa bazowa jest w oddzielnym pliku dołączanego
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';
}
Daje następujący błąd:
PHP Fatal error: Class 'Test2' not found in /path/to/test.php on line 8
niniejsza działa
test2.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';
}
Dlaczego oddanie klasy bazowej (Test1) w pliku dołączanego powodować klasa dziecko, które jest rozszerzenie go nie można znaleźć ? Innymi słowy, pierwszym przykładem jest błąd, ponieważ nie można znaleźć Test2, gdy próbujemy go utworzyć. Ten rodzaj ma sens, ponieważ nie dotarliśmy jeszcze do Test2 w procesie wykonywania kodu. Jednak w drugim przykładzie (bez instrukcji include) nie ma błędu, mimo że jest to podobna sytuacja (nie osiągnęliśmy jeszcze klasy Test2 w kodowaniu).
Och, i to jest w wersji 5.1.6 .
UPDATE:
OK, Daff jest poprawny - jeśli przeniosę
$main = new mainClass();
do końca w test.php przykład, to działa. Nadal chciałbym wiedzieć, dlaczego nie działa, jeśli powyższa linia nie jest na końcu - działa dobrze w przykładzie test2.php, który na końcu nie ma linii $ main = new mainClass() .
UPDATE 2:
OK, próbowałem za pomocą require, require_once
i include
zamiast include_once
- żadna z tych prac. Dodałem także instrukcję test echo do pliku test-include.php i zostanie wydrukowany (plus nie dostaję błędu o nieistniejącym pliku włączającym), więc wiem, że instrukcja include działa.
czy jesteś pewien, że załącznik działa? – Rufinus
Jak to się nie udaje? Błąd kompilacji, błąd wykonania, brak błędu, ale błędne wyniki? – Lucky
Co widzisz, jeśli używasz "wymagać"? Co widzisz, jeśli wstawisz "echo" To jest test-include.php ";" na początku "test-include.php"? Czy "test-include.php" znajduje się w tym samym katalogu? Czy jest na twojej ścieżce dołączania? – GZipp