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)?

¿Fue útil?

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.

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