Ok, así es como funciona internamente.
Cuando intenta utilizar una clase que no existe, llama a cada una de las devoluciones de llamada spl_autoload
una por una hasta que exista la clase (y la función __autoload
es una de ellas). Si no existe al final de la cadena, aumenta el error de clase no encontrada.
Cuando llama al class_exists
sin el segundo parámetro (que le dice que no intente cargarlo si no existe), llama a la cadena de spl_autoload
devoluciones de llamada hasta que encuentra la clase o se llama al último método . Luego vuelve si encontró la clase.
Por lo tanto, todo depende de lo que esté haciendo en la función de autocarga. Si haces algo como:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (!file_exists($class)) {
die('Could not find '.$class);
}
require_once $filename;
}
Mata la ejecución y no funcionará según lo previsto. En su lugar, debe hacer:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (file_exists($class)) {
require_once $filename;
}
}
Eso es todo lo que necesita hacer.
Ahora, no desea que se ejecute el archivo. Esta bien. Hay una solución fácil para eso. No coloque ese archivo en el mismo directorio que las clases cargadas automáticamente. Derrota el propósito de la carga automática.
La única otra solución sería almacenar un mapa de nombres de clase a nombres de archivo, y basar su carga automática fuera de eso. De lo contrario, siempre ejecutará el archivo (ya que eso es lo que le pedirá que haga) ...
obviusly es necesario el uso de autocarga porque la clase no se ha cargado! –
Muestra tu función de carga automática ... Debería mostrar 'ClassName does exists ...' after the 'This crash all', ya que no le importa por defecto si la clase no está cargada. Sospecho que estás matando la ejecución en la función '__autoload' si no encuentras la clase, y no deberías ... – ircmaxell
Del código que se da los resultados no pueden reproducirse. Así que publique un poco más de código. – tplaner