Para que el se ha encontrado con que quiere poder extender sus aplicaciones de PHP mediante plug-ins, aquí hay una idea muy simple de como se puede hacer.
Supongamos que tenemos un archivo llamado external_dateFormat.php que continue únicamente una función:
-
function external_dateFormat($string, $include_time = false, $date_format = 'd/m/Y', $time_format = 'H:i:s')
-
{
-
if($include_time)
-
{
-
$format = $date_format.' '.$time_format;
-
return date($format, strtotime($string));
-
}
-
else
-
return date($date_format, strtotime($string));
-
}
-
?>
Básicamente recibe unos parámetros y devuelve una fecha según el formato que reciba o el pre-determinado.
Ahora bien; por otro lado tenemos una clase en donde tenemos algunas funciones y queremos llamar a esta función dateFormat() solo en un momento dato y bajo ciertas circumstancias, como si se tratase de un plug-in por ejemplo.
A continuación la clase:
-
-
class isample {
-
-
// Aquí guardamos la sobrecarga de variables. Esto se puede omitir, pero si llegamos
-
// a tener estructuras de arrays muy complejas PHP se pierde.
-
private $_s_g = array();
-
-
// Cuando se trata de acceder (almacenar) una variable que no existe se invoca a este
-
// método que la guardará en el array anterior.
-
// $name es el nombre de la variable que queremos escribir
-
// $value el valor que tendrá
-
function __set($name, $value)
-
{
-
$this->_s_g[$name] = $value;
-
}
-
-
// Cuando se trata de acceder (leer) una variable que no existe se invoca a este
-
// método que la obtendrá del array anterior.
-
// $name es el nombre de la variable de la cual queremos saber su valor
-
function __get($name)
-
{
-
return $this->_s_g[$name];
-
}
-
-
// Cuando se trata de acceder a un método que no existe en esta clase se invoca
-
// método (mágico) que permite extender la llamada a otra funcíon o, en este caso,
-
// cargar nuestro "plug-in" del archivo externo.
-
// $name es el nombre del método al que queremos acceder
-
// $args son los argumentos que le pasaríamos
-
function __call($name, $args)
-
{
-
// Incluímos (solo una vez) el archivo con nuestra función
-
require_once('external_'.$name.'.php');
-
-
// A la variable fecha (que no está ligada al objecto) le asignamos el resultado de nuestra función.
-
// Llamamos a nuestra función y le pasamos los parámetros recibidos desde la llamada
-
$this->fecha = call_user_func_array('external_'.$name, $args);
-
}
-
}
-
-
$str = '2008-01-12 14:43:21';
-
$t = new isample(); // Creamos una nueva instacia del objeto
-
-
// Llamamos al método dateFormat que no existe en este objecto
-
$t->dateFormat($str, true, 'D d, M / Y');
-
-
// Mostramos el valor de la variable fecha (que solo existe mágicamente en el objeto)
-
echo $t->fecha;
-
-
?>
Y con este pequeño ejemplo se pueden implementar modelos más complejos de plug-in. Se puede, por ejemplo, utilizar ob_start(); y crear un potente y rápido sistema de cache para las funciones incluidas, pero eso ya es otra historia.
Espero que les sea de ayuda.