Zend_Loader

Este es el primero de los minitutoriales que tengo pensado hacer, está es la manjor manera de ir aprendiendo :D 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:

  1. Zend_Loader::loadFile()
  2. Zend_Loader::loadClass()
  3. Zend_Loader::isReadeable();
  4. 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 :D

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