Pregunta
Realmente no conseguir la documentación para spl_autoload
bool spl_autoload_register ([ callback $autoload_function ] )
A mi entender, que tratará de ejecutar las funciones registradas cuando PHP se encuentra con una clase que no está cargado ya. así ejemplo,
public function autoload() {
require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();
hará que la requieren para funcionar? así que también puede registrarse muchas funciones de autocarga?
public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');
en el caso de la doctrina,
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
se pasa una matriz, así que supongo que va a tratar de ejecutar la función de carga automática dentro de la clase Doctrina (que fue necesario)?
Solución
spl_autoloader_register
registra una función de devolución de llamada / método, que se llamará cuando el código está tratando de utilizar una clase no conocida.
A de devolución de llamada función puede ser descrita de varias maneras:
- un nombre de función simple:
'my_function'
- un método estático de una clase:
array('MyClass', 'myMethod')
- un método de una instancia de una clase:
array($myObject, 'myMethod')
En el caso de la Doctrina, que parece ser la segunda solución:. Si se utiliza una clase PHP que no sabe, el cargador automático llamará Doctrine::autoload
, pasándole el nombre de la clase como un parámetro
así que también puede registrarse muchas de autocarga funciones?
Sí, se puede, con spl_autoload_register
:
Si debe haber carga automática múltiple funciones,
spl_autoload_register()
permite esto. de manera eficaz crea una cola de funciones de autocarga, y se ejecuta a través de cada uno de ellos en el orden en que están definidos.
Pero no definimos generalmente una función de carga automática / método para cada clase tenemos; eso sería muy ineficiente, supongo.
En su lugar, se utiliza el nombre de clase, que es recibida por la función de carga automática, para decidir qué archivo debe ser incluido.
Por ejemplo, una función de carga automática podría tener este aspecto:
function my_autoloader($className)
{
require LIBRARY_PATH . '/' . $className . '.php';
}
El truco es que si los archivos tienen nombres de las clases que contienen, se hace mucho más fácil inmediatamente; -)
Esta es la razón por clases a menudo se denominan utilizando la convención PERA: mapas My_Class_Name
a la My/Class/Name.php
archivo
Otros consejos
Todo su afirmación es correcta.
spl_autoload_register
le permite registrar múltiples funciones de autocarga. En el caso de que se intenta crear o utilizar un objeto de una clase que no se ha cargado en el entorno de PHP, PHP ejecutar todas las funciones de carga automática en busca de esa clase.
El ejemplo Doctrina que das es el uso de lo que se llama un de devolución de llamada para registrar un método en el interior de un clase. Una devolución de llamada es simplemente una matriz que contiene el nombre de la clase (por métodos estáticos) o una instancia de esa clase (por métodos no estáticos), y el nombre del método.
¿Qué decir es correcta. Se llama cuando se crea una instancia de una clase desconocida. A continuación, obtener la oportunidad de incluir / requieren el archivo necesario.
Cuando la función reside en una clase, usted tiene que pasar en una matriz. En este caso se trata de una función estática porque pasan en la clase de Doctrina en lugar de una instancia de la clase Doctrina.