Archivo de Diciembre 2007|Página de archivo por mes
Registry Pattern en PHP5
El registry pattern, pese a su simplicidad, es un patrón sumamente útil para nuestros desarrollos en OOP.
En resumidas palabras, el Registry Pattern, es un medio simple y eficiente de compartir datos y objetos en nuestra aplicación sin tener que preocuparse de mantener numerosos parámetros o hacer uso de variables globales.
El objeto que compone el patrón simplemente debe contener un array compuesto de pares clave – que podrán ser datos simples u objetos de cualquier tipo. Así mismo también se puede proveer al objeto registry de mecanismos de control para la gestión de los elementos insertados en su array (cantidad de elementos, control de duplicaciones de key, eliminación de elementos, etc.).
Veamos un pequeño ejemplo:
<?php
class Registry
{
private $datos = array();
public function add($key, $object)
{
if(!isset($this->datos[$key]))
{
$this->datos[$key] = $object;
}
}
public function remove($key)
{
if(!isset($this->datos[$key]))
{
unset($this->datos[$key]);
}
}
public function get($key)
{
if(!isset($this->datos[$key]))
{
return $this->datos[$key];
}
}
public function exist($key)
{
if(isset($this->datos[$key]))
{
return true;
}
else return false;
}
}
?>
Luego podemos usar la clase Registry instanciandola:
$registry = new Registry();
if(!$registry->exist(“usuario”)) $registry->add(“usuario”, $usuario);
…
$usuario = $registry->get(“usuario”);
…
De esta manera podemos asegurar que tendremos accesibles las variables y objetos que queramos siempre que pasemos el objeto registry al constructor de cualquiera de esos objetos.
¿Más simple imposible no?
Bien, hasta aquí esta nueva pequeña introducción a los patrones de diseño… esperamos vuestros comentarios y aportaciones.
Màrius Armenteras Comellas
Factory Pattern en PHP5
Factory Pattern es un patrón de diseño cuya función es, como su nombre indica, fabricar instancias de objetos en tiempo de ejecución.
Básicamente se trata de un método estático que, mediante un parámetro, tomará la decisión de devolver una instancia de una clase (o generalmente una subclase).
Esta funcionalidad puede permitir modificar partes concretas de una aplicación sin que esto afecte al resto.
El ejemplo que se incluye a continuación esboza, de forma simple, lo que puede aportar este patrón de diseño. Imaginemos que nuestro sistema de usuarios obtiene el nombre del mismo extrayéndolo de una BBDD. Podríamos realizar la programación teniendo esto en cuenta y nuestro código funcionaria a la perfección. ¿Pero que pasaría si un nuevo requisito fuera que los datos de esos usuarios se obtuvieran de un XML? Con seguridad deberíamos modificar bastantes partes de nuestro código, teniendo mucho cuidado que estas modificaciones no causen efectos colaterales no deseados. Todo esto lo podemos solucionar con una estructura como la que sigue.
Las clases que obtendrán los datos las hacemos implementar un interface común (en este caso un método getNombre) y una clase que será la propia fábrica en si: UsuarioFactory.
<?php
interface IUsuario
{
function getNombre();
}
class Usuario implements IUsuario
{
public function __construct($id) {}
public function getNombre()
{
return “Nombre del usuario”;
}
}
class UsuarioFactory
{
public static function crear($id)
{
return new Usuario($id);
}
}
$usuario = UsuarioFactory::crear(1);
echo $usuario->getNombre();
?>
Evidentemente esta es una aproximación muy simplificada de este conocido patrón de diseño, aunque espero que resulte útil como primera toma de contacto.
Five common PHP design patterns
Patterns For PHP
Màrius Armenteras Comellas
XML en PHP5 con SimpleXML
Antes de PHP5 trabajar con XML podía resultar engorroso. La forma habitual de manipular XML era usar las API propuestas por SAX (Simple API for XML) y DOM-XML (Document Object Model XML).
Con la aparición de PHP5 se incorpora una tercera opción que, sin duda, facilitará la vida a aquellos que deban trabajar con XML. Se trara de simpleXML.
Hay varias maneras de trabajar con simpleXML:
Cargando el XML desde un string:
$stringXML = file_get_contents( ‘file.xml’ );
$file = simplexml_load_string( $stringXML );
Cargando el archivo XML directamente:
$file = simplexml_load_file(“file.xml”);
O con un estilo más OO:
$file = new SimpleXMLElement(‘file.xml’, null, true);
Con estas simples sentencias tendremos un array $file con el contenido estructurado del XML.
Una vez tenemos esta información ya podemos empezar a manipular o filtrar los datos.
Para obtener resultados concretos del árbol de datos generado podemos usar la potente sintaxis de XPATH:
file.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<simplexml>
<persona>
<nombre>Ned</nombre>
<apellido>Stark</apellido>
</persona>
<persona>
<nombre>Jon</nombre>
<apellido>Nieve</apellido>
</persona>
<persona>
<nombre>Bran</nombre>
<apellido>Stark</apellido>
</persona>
<persona>
<nombre>Jaime</nombre>
<apellido>Lannister</apellido>
</persona>
<persona>
<nombre>Tyrion</nombre>
<apellido>Lannister</apellido>
</persona>
</simplexml>
Para obtener los nodos persona que contengan un apellido en concreto:
<?php
$xml_file = simplexml_load_file(“file.xml”);
foreach($xml_file->xpath(“//*[contains(apellido,'Stark')]“) as $persona)
{
printf(“%s – %s <br>”, $persona->nombre, $persona->apellido);
}
?>
En el caso de tener que alterar los datos del XML es muy práctico trabajar con el método más OO style:
$file = new SimpleXMLElement(“file.xml”, null, true);
$persona = $file->addChild(“persona”);
$persona->addChild(“nombre”,”Rickon”);
$persona->addChild(“apellido”, “Stark”);
Más simple imposible no?
Tras todas las modificaciones podemos obtener el XML resultante con el método asXML():
$file->asXML(“newFile.xml”);
Hasta aquí esta pequeña introducción a simpleXML. Ahora queda en vuestras manos seguir profundizando en las poderosas posibilidades de esta librería en combinación con XPATH.
Màrius Armenteras Comellas
Dejar un comentario
Dejar un comentario
Dejar un comentario