The New Cult of Dead Cow
Propiedades en PHP5
Enero 31st, 2007 - [Enlace local]
Las propiedades son metodos que te permiten acceder a los atributos de una clase de una manera ordenada.
Me explico, tenemos la siguiente clase:
class Persona{
public nombre;
public edad;
}
Cuando la queremos usar hacemos lo siguiente:
$per = new Persona();
$per->nombre = "Arthas";
$per->edad = 24;
Sin embargo nada nos impide hacer :
$per = new Persona();
$per->nombre = 23;
per->edad = "Lo que sea";
Las propiedades en cambio nos permiten asegurarnos que el acceso a los atributos de una clase, se hacen de la manera especificada por nosotros. Ejemplo:
class Persona{
public nombre;
public edad;public __set($attr,$value)
{
switch ($attr)
{
case "nombre":
if ()
{
$this->nombre = $value;
}
else
{
throw new Exception(”Informacion no valida”);
}}
}
}
Asi cuando hacemos uso de las propiedades, podemos controlar como se accesa a la informacion.
El problema viene cuando heredamos una clase, y en la clase hija queremos redefinir las politicas de control sobre algunas de las propiedades.
Por ejemplo, quisiera que en la clase heredada solo se grabaran los 15 primeros caracteres.
La unica manera es redefinir todo el metodo __get, cargandonos con eso toda una gran cantidad de trabajo. O sea volveriamos al copy & paste, para tener de nuevo el metodo completo y luego hacer las modificaciones que necesitaramos :S. NADA mas fuera de la OO.
En fin, la única solución que se me ocurre es crear una función que reemplace el acceso a esa propiedad, por ejemplo setNombre($value), pero esto no impediria que se ingrese por el metodo antiguo.
Bueno si a alguien se le ocurre otra forma de hacerlo , por favor aviseme.
Haber si para php6, la gente de Zend se les ocurre separar el codigo de acceso para cada propiedad. Algo mas o menos asi:
class Persona{private nombre;
property nombre
{
function __get()
{
return $this->nombre;
}function __set($value)
{
//Codigo de validacion
$this->nombre = $value;
}
}}