__autoload - namespace php
¿Cómo usar spl_autoload_register? (2)
¿Cómo determina exactamente qué ''$ clase'' cargar?
La $class
se pasa por php automáticamente. Y es el nombre de la clase no declarado todavía, pero usado en algún lugar en tiempo de ejecución
class Manage
{
spl_autoload_register(function($class) {
include $class . ''.class.php'';
});
}
Digamos que tengo un código como el anterior. Elegí usar el método de la función anónima para cargar clases, pero ¿cómo se usa? ¿Cómo determina exactamente qué ''$class''
cargar?
No puedes poner el código allí. Debe agregar el registro SPL después de su clase. Si desea registrar una función dentro de la clase Manage
, puede hacer:
class Manage {
public static function autoload($class) {
include $class . ''.class.php'';
}
}
spl_autoload_register(array(''Manage'', ''autoload''));
Sin embargo, como demostró, puede usar una función anónima. Ni siquiera necesitas una clase, así que solo puedes hacer:
spl_autoload_register(function($class) {
include $class . ''.class.php'';
});
De cualquier manera, la función que especifique se agregará a un grupo de funciones que son responsables de la carga automática. Su función se adjunta a esta lista (por lo tanto, si ya había alguna en la lista, la suya será la última). Con esto, cuando haces algo como esto:
UnloadedClass::someFunc(''stuff'');
PHP se dará cuenta de que UnloadedClass no ha sido declarado todavía. Luego iterará a través de la lista de funciones de carga automática de SPL. Llamará a cada función con un argumento: ''UnloadedClass''
. Luego, después de llamar a cada función, verifica si la clase existe todavía. Si no lo hace, continúa hasta llegar al final de la lista. Si la clase nunca se carga, obtendrá un error fatal que le indica que la clase no existe.