Clase View
Vamos a crear una pequeña clase que haga de motor de plantillas, aunque con pocas funcionalidades. Solo nos permite incluir una plantilla y asignarle variables.
La almacenamos en la carpeta **core** y la llamaremos **View.php** (core/View.php). El contenido de dicha clase será:
<?php
class View
{
public function show($name, $vars = array())
{
//$name - nombre de nuestra plantilla, por ej, listar.php
//$vars - contenedor de variables,
// es un array del tipo clave => valor (opcional).
//Cogemos una instancia de nuestra clase de configuracion.
$config = Config::getInstance();
//Creamos la ruta real a la plantilla
$path = $config->get('VIEWS_FOLDER') . $name;
//Si no existe el fichero en cuestion, lanzamos una excepción
if (file_exists($path) == false)
throw new Exception ('La plantilla ' . $path . ' no existe');
//Si hay variables para asignar, las pasamos una a una.
if(is_array($vars))
{
foreach ($vars as $key => $value)
{
$$key = $value;
}
}
//Finalmente, incluimos la plantilla.
include($path);
}
}
/*
El uso es bastante sencillo:
$vista = new View();
$vista->show('listar.php', array("nombre" => "Juan"));
*/
¿Qué hace esta instrucción $$key = $value?
En PHP existen un tipo de variables llamadas **variables variables**. A veces es conveniente tener nombres de variables que se pueden definir y usar dinámicamente, como por ejmplo para un motor de plantillas. Una variable normal se establece con una sentencia como:
<?php
$a = 'titulo';
?>
Una _variable variable_ toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, titulo, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:
<?php
$$a = 'Frankenstein';
?>
En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP:
$a que contiene "titulo"
$titulo que contiene "Frankenstein"
<?php
$a = 'titulo';
$$a = 'Frankenstein';
echo "$a - $titulo"; //Titulo - Frankenstein
?>
Más información en el manual de PHP accediendo a este enlace: http://php.net/manual/es/language.variables.variable.php