Ahora que tenemos una idea de qué es el autoloading y cuáles son los objetivos y el
diseño de la solución de autoloading de Zend Framework, veamos cómo usar
Zend_Loader_Autoloader.
En el caso más simple, simplemente requeriría la clase y luego la instanciaría. Dado que
Zend_Loader_Autoloader es un singleton (debido a que el
autoloader de SPL es un recurso único), usamos
getInstance() para obtener una instancia.
require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance();
Por defecto, esto permitirá cargar cualquier clase con los prefijos de namespace "Zend_" o "ZendX_", siempre que estén en su include_path.
¿Qué sucede si tiene otros prefijos de namespace que desea usar? La mejor y más
simple manera es llamar al método registerNamespace() en la
instancia. Puede pasar un único prefijo de namespace, o un array de ellos:
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Foo_');
$loader->registerNamespace(array('Foo_', 'Bar_'));
Alternativamente, puede indicarle a Zend_Loader_Autoloader que
actúe como un autoloader de "respaldo" (fallback). Esto significa que intentará resolver
cualquier clase sin importar el prefijo de namespace.
$loader->setFallbackAutoloader(true);
![]() |
No lo use como autoloader de respaldo |
|---|---|
|
Aunque resulta tentador usar
Internamente,
Puede suprimir los mensajes de error (la documentación de
|
![]() |
Prefijos de namespace frente a namespaces de PHP |
|---|---|
|
En el momento de escribir esto, PHP 5.3 ya ha sido lanzado. Con esa versión, PHP ahora cuenta con soporte oficial de namespaces. Sin embargo, Zend Framework es anterior a PHP 5.3, y por lo tanto a los namespaces. Dentro de Zend Framework, cuando nos referimos a "namespaces", nos referimos a una práctica mediante la cual las clases se prefijan con un "namespace" de proveedor. Como ejemplo, todos los nombres de clase de Zend Framework se prefijan con "Zend_" -- ese es nuestro "namespace" de proveedor. Zend Framework planea ofrecer soporte nativo de namespaces de PHP en el autoloader en revisiones futuras, y su propia librería utilizará namespaces a partir de la versión 2.0.0. |
Si tiene un autoloader personalizado que desea usar con Zend Framework -- quizás un
autoloader de una librería de terceros que también está usando -- puede gestionarlo con
los métodos pushAutoloader() y
unshiftAutoloader() de Zend_Loader_Autoloader.
Estos métodos añadirán o anteponerán, respectivamente, autoloaders a una cadena que se
invoca antes de ejecutar el mecanismo interno de autoloading de Zend Framework. Este
enfoque ofrece los siguientes beneficios:
Cada método toma un segundo argumento opcional, un prefijo de namespace de clase. Esto puede usarse para indicar que el autoloader dado solo debe usarse al buscar clases con ese prefijo de clase. Si la clase que se está resolviendo no tiene ese prefijo, el autoloader se omitirá -- lo que puede llevar a mejoras de rendimiento.
Si necesita manipular el registro de
spl_autoload(), cualquier autoloader que sea un callback que apunte a métodos de instancia puede plantear problemas, ya quespl_autoload_functions()no devuelve exactamente los mismos callbacks.Zend_Loader_Autoloaderno tiene tal limitación.
Los autoloaders gestionados de esta manera pueden ser cualquier callback válido de PHP.
// Append function 'my_autoloader' to the stack,
// to manage classes with the prefix 'My_':
$loader->pushAutoloader('my_autoloader', 'My_');
// Prepend static method Foo_Loader::autoload() to the stack,
// to manage classes with the prefix 'Foo_':
$loader->unshiftAutoloader(array('Foo_Loader', 'autoload'), 'Foo_');
![[Warning]](images/warning.png)
![[Note]](images/note.png)