Tabla de contenidos
- 42.1. Carga dinámica de archivos y clases
- 42.2. El autoloader
- 42.3. Autoloaders de recursos
- 42.4. Carga de plugins
- 42.5. La interfaz SplAutoloader
- 42.6. El AutoloaderFactory
- 42.7. El StandardAutoloader
- 42.8. El ClassMapAutoloader
- 42.9. La utilidad de generación de mapas de clases: bin/classmap_generator.php
La clase Zend_Loader incluye métodos para ayudarle a cargar archivos
de forma dinámica.
![]() |
Zend_Loader frente a require_once() |
|---|---|
Los métodos de |
El método estático Zend_Loader::loadFile() carga un
archivo PHP. El archivo cargado puede contener cualquier código
PHP. El método es un envoltorio para la función PHP
include(),
que emite un aviso de PHP en caso de fallo, por ejemplo
si el archivo especificado no existe.
Ejemplo 42.1. Ejemplo del método loadFile()
Zend_Loader::loadFile($filename, $dirs=null, $once=false);
El argumento $filename especifica el nombre de archivo a cargar,
que no debe contener ninguna información de ruta.
Se realiza una comprobación de seguridad sobre $filename.
$filename solo puede contener caracteres alfanuméricos,
guiones ("-"), guiones bajos ("_") o puntos (".").
No se impone ninguna restricción de este tipo sobre el argumento $dirs.
El argumento $dirs especifica en qué directorios buscar el
archivo. Si el valor es NULL, solo se busca en el include_path;
si el valor es una cadena o un array, se buscará en el directorio o directorios
especificados, seguidos del include_path.
El argumento $once es un booleano. Si es TRUE,
Zend_Loader::loadFile() usa la función PHP
include_once()
para cargar el archivo; en caso contrario se usa la función PHP
include().
El método estático Zend_Loader::loadClass($class, $dirs)
carga un archivo PHP y luego comprueba la existencia de la clase.
Ejemplo 42.2. Ejemplo del método loadClass()
Zend_Loader::loadClass('Container_Tree',
array(
'/home/production/mylib',
'/home/production/myapp'
)
);
La cadena que especifica la clase se convierte en una ruta relativa sustituyendo los guiones bajos por separadores de directorio de su sistema operativo, y añadiendo '.php'. En el ejemplo anterior, 'Container_Tree' se convierte en 'Container\\Tree.php' en Windows.
Si $dirs es una cadena o un array,
Zend_Loader::loadClass() busca en los directorios en
el orden proporcionado. Se carga el primer archivo coincidente. Si el archivo
no existe en los $dirs especificados, entonces se busca en el
include_path del entorno PHP.
Si el archivo no se encuentra o la clase no existe tras la carga,
Zend_Loader::loadClass() lanza una
Zend_Exception.
Zend_Loader::loadFile() se usa para la carga, por lo que el
nombre de la clase solo puede contener caracteres alfanuméricos y el guion
('-'), el guion bajo ('_') y el punto ('.').
![]() |
Carga de clases desde espacios de nombres de PHP |
|---|---|
|
A partir de la versión 1.10.0, Zend Framework permite ahora cargar clases desde espacios de nombres de PHP. Este soporte sigue las mismas directrices e implementación que se encuentran en la implementación de referencia PHP Framework Interop Group PSR-0. Según esta directriz, se aplican las siguientes reglas:
Como ejemplos:
|
El método estático Zend_Loader::isReadable($pathname)
devuelve TRUE si existe un archivo en la ruta especificada
y es legible, y FALSE en caso contrario.
Ejemplo 42.3. Ejemplo del método isReadable()
if (Zend_Loader::isReadable($filename)) {
// do something with $filename
}
El argumento $filename especifica el nombre de archivo a
comprobar. Puede contener información de ruta.
Este método es un envoltorio para la función PHP
is_readable().
La función PHP no busca en el
include_path, mientras que
Zend_Loader::isReadable() sí lo hace.
La clase Zend_Loader contiene un método que puede registrar con el
autoloader SPL de PHP. Zend_Loader::autoload()
es el método de callback. Como comodidad, Zend_Loader proporciona
la función registerAutoload() para registrar su
método autoload(). Si la extensión spl_autoload
no está presente en su entorno PHP, entonces el método
registerAutoload() lanza una
Zend_Exception.
Ejemplo 42.4. Ejemplo de registro del método de callback del autoloader
Zend_Loader::registerAutoload();
Tras registrar el callback de autocarga de Zend Framework, puede
hacer referencia a clases de Zend Framework sin tener que cargarlas
explícitamente. El método autoload() usa
Zend_Loader::loadClass() automáticamente cuando usted
hace referencia a una clase.
Si ha extendido la clase Zend_Loader, puede proporcionar un
argumento opcional a registerAutoload(), para especificar
la clase desde la cual registrar un método autoload().
Ejemplo 42.5. Ejemplo de registro del método de callback de autocarga desde una clase extendida
Debido a la semántica de las referencias de funciones estáticas en PHP,
debe implementar código tanto para loadClass()
como para autoload(), y autoload()
debe llamar a self::loadClass(). Si su método
autoload() delega en su padre para
llamar a self::loadClass(), entonces llama al
método de ese nombre en la clase padre, no en la subclase.
class My_Loader extends Zend_Loader
{
public static function loadClass($class, $dirs = null)
{
parent::loadClass($class, $dirs);
}
public static function autoload($class)
{
try {
self::loadClass($class);
return $class;
} catch (Exception $e) {
return false;
}
}
}
Zend_Loader::registerAutoload('My_Loader');
Puede eliminar un callback de autocarga. El método
registerAutoload() tiene un segundo argumento opcional,
que es TRUE por defecto. Si este argumento es
FALSE, el callback de autocarga se elimina de la
pila de autocarga de SPL.
![[Tip]](images/tip.png)
![[Note]](images/note.png)