Pregunta

¿Qué tan inteligente es SPL_AUTOLOAD_REGISTER?¿Sabe que "mirar hacia adelante" para la definición de clase en otros archivos antes de intentar incluir?

cuando ejecuto mi página index.php estoy viendo ERROR FATAL: Clase 'Entrada \ Entrada' no se encuentra en /var/www/php/classes/input/date.php en la línea 4

index.php ejecuta lo siguiente (después de este bloque, crea un objeto de una de las clases, si no estoy complementando la única línea que todo funciona perfectamente)

function my_autoloader() {
    //include_once "/var/www/php/classes/input/input.php"; //if this is uncommented, it fixes the problem, but I'm not sure why
    foreach (glob("/var/www/php/classes/*/*.php") as $filename)
    {
        require_once $filename;
    }
}
spl_autoload_register('my_autoloader');

¿Está mal mi sintaxis?¿SPL_AUTOUROAD_REGISTE SUPUERTE SUPUESTRA PARA FUNCIONAR ESTA MANERA?Muchos otros archivos en estas carpetas dependen de cada uno y el autocargador parece "resolverlo".No estoy seguro de por qué de repente se coloca en la clase "Entrada" en particular

¿Fue útil?

Solución

Estás usando el autocargador de una manera incorrecta.Se supone que solo debe cargar las clases que necesita para una solicitud específica, no en toda la carpeta.

Lea más sobre las clases de carga automática correctamente con algunos buenos ejemplos: https://github.com/php-fig/fig-andards/blob/master/acepted/psr-0.md

Otros consejos

lo estás usando erróneamente.
El AutoLoad se usa para cariño automático solo el nombre de la clase dado en el primer argumento de devolución de llamada, no para cargar todas las clases como lo está haciendo.

Por ejemplo:

spl_autoload_register(function ($class) {
 // ...
 $class = stream_resolve_include_path(sprintf("%s.php", $class));
 if ($class !== false) {
  require $class
 }
});

$class contendrá la clase para cargarla, por lo que puede usarlo para encontrar el archivo que contiene esta clase en su sistema de archivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top