¿Cómo puedo crear una propiedad a partir de un argumento dado dentro del método de un objeto?Cómo crear nueva propiedad dinámicamente
class Foo{
public function createProperty($var_name, $val){
// here how can I create a property named "$var_name"
// that takes $val as value?
}
}
Y yo quiero ser capaz de acceder a la propiedad como:
$object = new Foo();
$object->createProperty('hello', 'Hiiiiiiiiiiiiiiii');
echo $object->hello;
También es posible que yo pudiera hacer que la propiedad pública/protected/privado? Sé que en este caso debería ser pública, pero puede que desee agregar algunos métodos magik para obtener propiedades protegidas y otras cosas :)
creo que he encontrado una solución:
protected $user_properties = array();
public function createProperty($var_name, $val){
$this->user_properties[$var_name] = $val;
}
public function __get($name){
if(isset($this->user_properties[$name])
return $this->user_properties[$name];
}
que hacer ¿Piensas que es una buena idea?
gracias. Lo necesito dentro de la clase sin embargo. Es algo complicado de explicar, las propiedades son en realidad objetos que son extensiones de sitios que el administrador del sitio puede habilitar/deshabilitar :) Pero usaré mi solución, creo que es mejor mantenerlos dentro de una matriz. – Alex
¿Es posible configurarlas como privadas o protegidas? –
Establecer una propiedad como esta no nos permite hacerlo privado o protegido porque está configurado como público. Sin embargo, puede intentar trabajar con los métodos de magia OOP '__get()' y '__set()'. Consulte http://stackoverflow.com/questions/4713680/php-get-and-set-magic-methods – mauris