Existen maneras de simular la persistencia de objetos a través de distintas llamadas, y esto es algo que se utiliza hace mucho tiempo en PHP. Tan simple como crear una tabla con los atributos de tu objeto, y luego un Mapper, que cargue esos datos desde la tabla, instancie el objeto necesario, le cargue los datos y lo devuelva.
Supongamos que tenemos la definición de un objeto en un archivo
class.Objeto.php:
Código PHP:
<?php
class Objeto
{
var $alto;
var $ancho;
var $largo;
function Objeto()
{
}
function superficie()
{
return $this->ancho * $this->alto * $this->largo;
}
}
?>
Luego, tenemos su Mapper, llamado
class.ObjetoMapper.php :
Código PHP:
<?php
class ObjetoMapper
{
function &cargar( $id )
{
$query = "SELECT alto, ancho, largo FROM tabla WHERE id=$id";
//... ejecutamos un query de la manera que prefieran
//... y obtenemos el array con los datos
$row = mysql_fetch_object($rs);
require_once('class.Objeto.php');
$obj =& new Objeto();
$obj->alto = $row->alto;
$obj->ancho = $row->ancho;
$obj->largo = $row->largo;
return $obj;
}
}
?>
Y finalmente, podemos invocar el uso de esta manera :
Código PHP:
<?php
$id = $_SESSION['id'];
$objeto =& ObjetoMapper::cargar($id);
// $Objeto ya es un Objeto instanciado
echo $objeto->superficie();
?>
De esta manera se mantiene separado, un objeto instanciado, de la capa de datos que lo sostiene (la Base de Datos en este caso) delegando el conocimiento de ambos estados ( instancia y base de datos ) al Mapper, que sabe como encargarse de leer un Objeto del contenedor de datos y devolverlo instanciado. En este ejemplo, para grabar un objeto en la base, tan solo habría que pasarle la instancia al Mapper, que sacaría los atributos, formaría el Query y lo ejecutaría contra la base, grabando el objeto.
Espero que les haya servido el ejemplo. Saludos.