Zend_Loader_StandardAutoloader está diseñado como un autoloader
compatible con PSR-0.
Asume una correspondencia 1:1 entre el espacio de nombres+nombre de clase y el sistema de
archivos, en la que los separadores de espacio de nombres y los guiones bajos se traducen
a separadores de directorio. Una instrucción simple que ilustra cómo funciona la
resolución es la siguiente:
$filename = str_replace(array('_', '\\'), DIRECTORY_SEPARATOR, $classname)
. '.php';
Las encarnaciones anteriores de autoloaders compatibles con PSR-0 en Zend Framework se
basaban en el include_path para la búsqueda de archivos. Esto ha
provocado varios problemas:
Debido al uso de
include, si el archivo no se encuentra, se genera una advertencia, incluso si otro autoloader es capaz de resolver la clase posteriormente.Documentar cómo configurar el
include_pathha resultado ser un concepto difícil de transmitir.Si existen múltiples instalaciones de Zend Framework en el
include_path, gana la primera de la ruta, incluso si esa no era la que el desarrollador pretendía.
Para resolver estos problemas, el StandardAutoloader, por
defecto, requiere que registre explícitamente pares de espacio de nombres/ruta (o pares
de prefijo de proveedor/ruta), y solo cargará un archivo si existe dentro de la ruta
proporcionada. Se pueden proporcionar múltiples pares.
Como medida de último recurso, también puede usar el
StandardAutoloader como un autoloader de "reserva" (fallback):
uno que buscará clases de cualquier espacio de nombres o prefijo de proveedor en el
include_path. Sin embargo, esta práctica no se recomienda debido
a las implicaciones de rendimiento.
Finalmente, como con todos los autoloaders en Zend Framework, el
StandardAutoloader es capaz de registrarse a sí mismo con el
registro de autoloaders SPL de PHP.
![]() |
Vocabulario: espacios de nombres frente a prefijos de proveedor |
|---|---|
|
En términos de autoloading, un "espacio de nombres" corresponde a la propia definición de PHP de los espacios de nombres en las versiones 5.3 y posteriores de PHP.
Un "prefijo de proveedor" hace referencia a la práctica, popularizada en versiones de
PHP anteriores a la 5.3, de proporcionar un pseudo-espacio de nombres en forma de
palabras separadas por guiones bajos en los nombres de clase. Por ejemplo, la clase
El |
El uso básico del StandardAutoloader requiere simplemente
registrar pares de espacio de nombres/ruta. Esto se puede hacer tanto en el momento de la
instanciación como mediante llamadas explícitas a métodos después de que el objeto haya
sido inicializado. Llamar a register() registrará el
autoloader con el registro de autoloaders SPL.
Por defecto, la clase registrará el espacio de nombres "Zend" en el directorio superior a donde se encuentra su propio archivo de clase en el sistema de archivos.
Ejemplo 42.7. Configuración manual
// This example assumes ZF is on your include_path.
// You could also load the autoloader class from a path relative to the
// current script, or via an absolute path.
require_once 'Zend/Loader/StandardAutoloader.php';
$loader = new Zend_Loader_StandardAutoloader();
// Register the "Phly" namespace:
$loader->registerNamespace('Phly', APPLICATION_PATH . '/../library/Phly');
// Register the "Scapi" vendor prefix:
$loader->registerPrefix('Scapi', APPLICATION_PATH . '/../library/Scapi');
// Optionally, specify the autoloader as a "fallback" autoloader;
// this is not recommended.
$loader->setFallbackAutoloader(true);
// Register with spl_autoload:
$loader->register();
Ejemplo 42.8. Configuración en la instanciación
El StandardAutoloader también se puede configurar en el
momento de la instanciación. Tenga en cuenta:
El argumento proporcionado puede ser un array o un objeto Traversable (como un objeto
Zend_Config).El argumento proporcionado también es un argumento válido para pasar al método
setOptions().
Lo siguiente es equivalente al ejemplo anterior.
require_once 'Zend/Loader/StandardAutoloader.php';
$loader = new Zend_Loader_StandardAutoloader(array(
'namespaces' => array(
'Phly' => APPLICATION_PATH . '/../library/Phly',
),
'prefixes' => array(
'Scapi' => APPLICATION_PATH . '/../library/Scapi',
),
'fallback_autoloader' => true,
));
// Register with spl_autoload:
$loader->register();
El StandardAutoloader define las siguientes opciones.
Opciones de StandardAutoloader
- namespaces
Un array asociativo de pares espacio de nombres/ruta. La ruta debe ser una ruta absoluta o una ruta relativa al script que la invoca, y debe contener solo clases que residan en ese espacio de nombres (o en sus subespacios de nombres). Por defecto, se registra el espacio de nombres "Zend", apuntando al directorio padre del archivo que define el
StandardAutoloader.- prefixes
Un array asociativo de pares prefijo de proveedor/ruta. La ruta debe ser una ruta absoluta o una ruta relativa al script que la invoca, y debe contener solo clases que comiencen con el prefijo de proveedor proporcionado.
- fallback_autoloader
Un valor booleano que indica si esta instancia debe actuar o no como un autoloader de "reserva" (fallback) (es decir, buscar clases de cualquier espacio de nombres o prefijo de proveedor en el
include_path). Por defecto,false.
Consulte los ejemplos en el inicio rápido para ver su uso.
![[Note]](images/note.png)