KAIZEN.
Mejoramiento continuo en la vida personal, familiar, social y de trabajo, que involucra a todos los actores de un proyecto por igual.Nuestra forma de vida merece ser mejorada constantemente creando estrategias de desarrollo orientadas a procesos con el fin asegurar el mejoramiento continuo

lunes, 10 de septiembre de 2007

Clase Zend_Loader (extraido del manual oficial de Zend_Framework)

La clase Zend_Loader incluye metodos para ayudarte a cargar archivos dinamicamente.

Zend_Loader vs. require_once()
El metodo Zend_Loader es usado si el nombre de archivo que necesitas cargar es variable.
Por Ejemplo si éste se basa en un parametro en una entrada de usuario , o pasado como argumento de un metodo.
Si estas cargando un archivo o una clase cuyo nombre es "constante", no existen beneficios de Zend _loader sobre el uso tradicional de funciones PHP como lo puede ser "requiere_once()"

Cargando archivos
El metodo estatico Zend_Loader::loadFile() lee un archivo PHP que pude contener cualquier tipo de codigo PHP.
El metodo es un wrapper (lo que se define como un pequeño programa o script, escrito para encapsular grandes programas),para la funcion de PHP include(). Este metodo lanza Zend_Exception en una falla, por ejemplo:si el archivo especificado no existe.


Ejemplo del metodo loadFile()




<?php
Zend_Loader::loadFile($filename, $dirs=null, $once=false);



el parametro o argumento $filename especifica el archivo a ser leido, el cual no debe contener ninguna informacion de su ubicacion. Un chequeo de seguridad es ejecutado sobre $filename en donde éste solo debe contener caracteres alfanumericos,o tambien dashes ("-"), underscores ("_"), o puntos ("."). No se pone ninguna otra restriccion en la discusion de $dirs.

El argumento $dirs especifica el directorio donde sera buscado el archivo, si este es NULL, solamente el es buscado en include_path. Si existe un string o un array, con directorio o directorios el archivo será buscado en los mismos y por ultimo en el include_path.

El argumento $once es booleano. Si éste es TRUE Zend_Loader::loadFile() usa la funcion de PHP include_once() para leer el archivo,de lo contrario la funcion include() sera usada.

Cargando Classes
El metodo estatico Zend_Loader::loadClass($class, $dirs) lee una archivo de clase PHP y despues chequea la existencia de la clase.

Ejemplo del metodo loadClass()


<?php

Zend_Loader::loadClass('Container_Tree',
array(
'/home/production/mylib',
'/home/production/myapp'
));

?>


El String que especifica la clase es convertido a un path relativo mediante la sustitucion de los directorios separados por 'underscores' y agregandole '.php'. En el ejemplo anterior, 'Container_Tree' se transforma en 'Container/Tree.php'.

El argumento $dirs puede ser un string o un array, Zend_Loader::loadClass()
busca los directorios en el orden suministrado. El primer archivo encontrado es leido. Si el archivo no existe en $dirs, entonces es buscado en el include_path del entorno PHP

Si el archivo no es encontrado o la clase no existe ,entonces Zend_Loader::loadClass() lanza Zend_Exception.

Zend_Loader::loadFile() es usado para la carga , pero el nombre de la clase solo puede contener caracteres alfanumericos y el hyphen ('-'), underscores ('_'), y el punto('.').

Testeando si un archivo es leible.

El metodo estatico Zend_Loader::isReadable($pathname) retorna TRUE si el archivo especificado en $pathname existe y es leible, de lo contrario FALSE .

Ejemplo del metodo isReadable()

<?php

if (Zend_Loader::isReadable($filename)) {
// do something with $filename
}


El argumento $filename especifica el archivo a ser chequeado. Este puede contener informacion del camino.
Este metodo es un wrapper para la funcion PHP is_readable(). La funcion PHP
no busca
en include_path, mientras Zend_Loader::isReadable() si lo hace.

Usando el Autoloader
La clase de Zend_Loader contiene un método que puede colocarse con el autoloader del SPL de PHP. Zend_Loader::autoload() es un método de servicio repetido. Como conveniencia, Zend_Loader proporciona el registro de la función del registerAutoload() su método autoload(). Si la extensión del spl_autoload no está presente en tu ambiente de PHP, entonces el método del registerAutoload() lanza un Zend_Exception.

Ejemplo de registracion del metodo autoloader

Ejemplo del metodo isReadable()

<?php

Zend_Loader::registerAutoload();



despues de registrar el Zend Framework autoload callback,puedes referenciar las clases desde Zend Framework sin tenerla que cargarlas explicitamente. El metodo autoload() usa Zend_Loader::loadClass() automaticamente cuando la clase es referenciada.

Si has extendido la clase Zend_Loader, tu puedes darle un argumento opcional al registerAutoload(), para especificar la clase de la cual colocar un método del autoload().

Ejemplo de registrando el metodo autoload callback desde una clase extendida

Debido a la semantica de las referencias estaticas en PHP, debes implementar codigo para ambas loadClass() y autoload(); y el autoload() debe llamar self::loadClass(). Si el metodo autoload() delega a su padre el llamar a self::loadClass(), entoces llama al metodo con ese nombre en la clase del padre, no en la subclase.


Ejemplo del metodo isReadable()

<?php

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');

No hay comentarios: