martes, 20 de agosto de 2013

Los mal llamados "atributos vituales" (php magic getters)



Php ofrece un mecanismo llamado "magic getters" (y "setters").  Se usan asi:

   class Empresa  {
       public $idempresa;
       public $nombre;
       public $direccion;

       public function getDescripcion(){
            return $this->nombre." ".$this->direccion;
       }
   }


En el extracto anterior, getDescripcion() es un "magic getter", podria usarse asi:

$emp = new Empresa();
$emp->nombre = "asc";
$emp->direccion = "anywhere";

echo $emp->descripcion;  // dira: "asc anywhere"


Al atributo "descripcion" se le considera muchas veces un "atributo virtual", y ciertamente no lo es, aunque la mala practica confunde una "tabla de base de datos" (que no se llaman "tablas" sino "relaciones") con
"Modelos".

Una cosa es una Tabla (mejor llamada "relacion") y otra cosa un Modelo.

En este caso, los atributos que representan a los campos de la relacion "Empresa" son "idempresa", "nombre" y "direccion". Y el mal llamado "atributo virtual" sería "descripcion".

Al modelo no le importa si es virtual o no, al modelo le importa que exista

Para el modelo (el diseño del sistema) no le importa si $empresa->descripcion es o no es un atributo de la base de datos, eso solo le importa a la implementación del "Modelo Empresa respecto al tipo de almacenamiento", es decir, si nuestro sistema requiere conocer una descripcion de la empresa va a llamar a:

echo "descripcion=".$empresa->descripcion;

Sin importar de donde vino, o donde esta almacenada, no le importa "cómo", le importa que exista.

No hay comentarios:

Publicar un comentario