Zend_Loader
Este es el primero de los minitutoriales que tengo pensado hacer, está es la manjor manera de ir aprendiendo
Zend_Loader es la clase más utilizada en todo ZendFramework, lógico es el que carga todas las demás. Este es nuestro árbol de directorio para las pruebas.

Zendframework está en /pruebas_Zend/libreria/Zend
Nuestro archivo donde probaremos nuetro código está en /pruebas_zend/loader.php
Zend_Loader tiene 4 metodos que vamos a ver:
- Zend_Loader::loadFile()
- Zend_Loader::loadClass()
- Zend_Loader::isReadeable();
- Zend_Loader::registerAutoload();
Pero antes de nada; tenemos que empezar con una cosa en nuestro archivo de prueba:
/**
* defino las rutas donde buscara por defecto los archivos.
* más info en: * http://es.php.net/manual/es/function.set-include-path.php
*/
set_include_path( ‘.’ .
PATH_SEPARATOR . ‘libreria’ .
PATH_SEPARATOR . ‘./’ .
PATH_SEPARATOR . get_include_path()
);
Leer el comentario del código; para más info ir a php.net
Despues incluiremos nuestra clase Zend_Loader a la manera “tradicional”:
/**
* cargo la clase Zend_Loader(), de la manera “tradicional”
*/
include_once(’Zend/Loader.php’);
Zend_Loader::loadFile
Zend_Loader::loadFile($nombre_de_archivo, $directorio=null, $once=false)
$nombre_de_archivo parámetro obligatorio, nunca pondremos la ruta (directorio/archivo.php), únicamente pondremos el nombre del archivo.
$ directorio parámetro NO obligatorio, aquí es donde pondremos la ruta hacia nuestro archivo, solo la ruta.(directorio_donde_esta_mi_archivo)
$once = parámetro NO obligatorio que le dice al loader si se carga como include_once() o como include()
Este método haría las veces de “include(), include_once()”, una de las ventajas que nos ofrece es la posibilidad de colocar excepciones y así poder controlar la carga de estos.
Problema Limitación encontrado :
“Zend_Loader::file() utiliza un metodo privado que está escrito de esta manera
protected static function _includeFile($filespec, $once = false)
{
if ($once)
{
return include_once $filespec;
} else {
return include $filespec ;
}
}
Y el problema de esto es que las variables declaradas en nuestro archivo se quedan en el ámbito de la funcion “_includeFile()” y no traspasan a el documento que incluye el archivo que contiene la variable.
Una solución puede ser el uso de de variables globales o una función que recupere la variable. más info(aunque yo no encontré la solución, solo leí unos cuantos comentarios acerca del tema) en: http://www.php.net/manual/en/language.variables.scope.php“
ejemplo:
try {
Zend_Loader::loadFile(’archivo.php’, ‘carpetaDePrueba’);
//Zend_Loader::loadFile(’archivoQueNoExiste.php’, ‘carpetaDePrueba’);
} catch (Zend_Exception $e){
echo ‘Error : ‘.$e->getMessage().”\n”;
}
Zend_Loader::loadClass
Zend_Loader::loadClass('directorio_clase',
array(
'/directorio/libreria',
'/directorio/otra_libreria'
)
);
‘directorio_clase’ parámetro obligatorio, la manera de actuar de este parámetro es algo “especial”, en este parámetro pondremos la ruta y nombre de archivo, que coincidirá con la clase, separado por la linea baja ( “_”)
array() parámetro obcional, aquí pondremos las posibles rutas que en las que buscará, normalmente esto está solventado con el “set_include_path()” que pusimos al principio
ejemplo:
try {
Zend_Loader::loadClass(’Zend_Date’);
//Zend_Loader::loadClass(’carga_una_clase_que_no_existe’);
} catch (Zend_Exception $e) {
echo ‘Error al cargar la clase: ‘.get_class($e).”\n”;
echo ‘Mensaje: ‘.$e->getMessage().”\n”;
}
echo Zend_Date::now().”\n”;
Zend_Loader::isReadeable
if (Zend_Loader::isReadable($archivo)) {
// nuestro archivo es legible
}
$archivo parámetro obligatorio, ruta y nombre de nuestro archivo.
Realmente todavía no le he econtrado mucha utilidad a este método; pero solo nos da información (true/false) a cerca de nuestro archivo, nos dice si es legible o está protegido contra lectura.
ejemplo:
if (Zend_Loader::isReadable(’archivo.txt’)) {
echo ‘archivo.txt Es legible’.”\n”;
}else {
echo ‘archivo.txt NO es legible’.”\n”;
}
Zend_Loader::registerAutoload
Zend_Loader::registerAutoload();
Si alguno entiende exactamente su función, rogaría em lo explique
Bueno, entonces nuestro archivo para probar Zend_Loader quedaría así:
/**
* defino las rutas donde buscara por defecto los archivos.
* más info en:
* http://es.php.net/manual/es/function.set-include-path.php
*/
set_include_path( ‘.’ .
PATH_SEPARATOR . ‘libreria’ .
PATH_SEPARATOR . ‘./’ .
PATH_SEPARATOR . get_include_path()
);
/**
* cargo la clase Zend_Loader(), de la manera “tradiconal”
*/
include_once(’Zend/Loader.php’);
/**
* Zend_Loader::loadClass();
*/
try {
Zend_Loader::loadClass(’Zend_Date’);
//Zend_Loader::loadClass(’carga_una_clase_que_no_existe’);
} catch (Zend_Exception $e) {
echo ‘Error al cargar la clase: ‘.get_class($e).”\n”;
echo ‘Mensaje: ‘.$e->getMessage().”\n”;
}
echo Zend_Date::now().”\n”;
/**
* Zend_Loader::loadFile();
* problema; si declaro una variable en el archivo a incluir
* Esta variable no estara definida en este documento;
*/
try {
Zend_Loader::loadFile(’archivo.php’, ‘carpetaDePrueba’);
//Zend_Loader::loadFile(’archivoQueNoExiste.php’, ‘carpetaDePrueba’);
} catch (Zend_Exception $e){
echo ‘Error : ‘.$e->getMessage().”\n”;
}
/**
* Zend_Loader::isReadable()
*/
if (Zend_Loader::isReadable(’archivo.txt’)) {
echo ‘archivo.txt Es editable’.”\n”;
}else {
echo ‘archivo.txt NO es editable’.”\n”;
}
Sin comentarios
No comments yet
Leave a reply