Esto no funciona:clase extendida no se encuentra cuando la clase base es separada en un archivo de inclusión
prueba.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';
}
prueba 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';
}
Da el siguiente error
PHP Fatal error: Class 'Test2' not found in /path/to/test.php on line 8
que esto se entiende trabajar
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';
}
¿Por qué poner la clase Base (Prueba1) en un archivo de inclusión causar la clase de niño que se está extendiendo a no encontrarse ? En otras palabras, el primer ejemplo está fallando porque no puede encontrar Test2 cuando intentamos instanciarlo. Esto tiene sentido ya que todavía no hemos llegado a Test2 en el flujo de ejecución del código. Sin embargo, en el segundo ejemplo (sin la instrucción include) no hay ningún error, aunque es una situación similar (todavía no hemos alcanzado la clase Test2 en la ejecución del código)
Ah, y esto es en la versión 5.1.6 .
ACTUALIZACIÓN:
OK, Daff es correcto - si muevo
$main = new mainClass();
hasta el final en el ejemplo prueba.php, funciona. Me gustaría saber por qué no funciona si la línea anterior no está al final; funciona bien en el ejemplo test2.php que no tiene la línea $ main = new mainClass() al final .
ACTUALIZACIÓN 2:
bien, He intentado usar require, require_once
include
y en lugar de include_once
- ninguno de estos trabajos. Y también agregué una declaración de prueba de eco en el archivo test-include.php y se imprime (además no obtengo un error sobre un archivo de inclusión inexistente) así que sé que la declaración de inclusión está funcionando.
¿Estás seguro de que el include está funcionando? – Rufinus
¿Cómo falla? ¿Error de compilación, error de ejecución, ningún error pero resultados incorrectos? – Lucky
¿Qué ves si usas "requerir"? ¿Qué ves si pones "echo" Esto es test-include.php '; " al comienzo de "test-include.php"? ¿Está "test-include.php" en el mismo directorio? ¿Está en tu ruta de inclusión? – GZipp