Как создать новое свойство динамически

Как я могу создать свойство из заданного аргумента внутри метода объекта?

class Foo{

  public function createProperty($var_name, $val){
    // here how can I create a property named "$var_name"
    // that takes $val as value?

  }

}

И я хочу иметь доступ к свойству, например:

$object = new Foo();
$object->createProperty('hello', 'Hiiiiiiiiiiiiiiii');

echo $object->hello;

Также возможно ли сделать свойство общедоступным / защищенным / частным? Я знаю, что в этом случае он должен быть общедоступным, но я могу добавить несколько магических методов для получения защищенных свойств и прочего:)


Думаю, я нашел решение:
  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];

  }

как вы думаете, это хорошая идея?

66
задан Alex 3 January 2012 в 02:21
поделиться