Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

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;
}
}

}

» Leer más, comentarios, etc...