Search code examples
phpobjectproperties

How to create new property dynamically


How can I create a property from a given argument inside a object's method?

class Foo{

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

  }

}

And I want to be able to access the property like:

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

echo $object->hello;

Also is it possible that I could make the property public/protected/private ? I know that in this case it should be public, but I may want to add some magik methods to get protected properties and stuff :)


I think I found a solution:

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

  }

do you think it's a good idea?


Solution

  • There are two methods to doing it.

    One, you can directly create property dynamically from outside the class:

    class Foo{
    
    }
    
    $foo = new Foo();
    $foo->hello = 'Something';
    

    Or if you wish to create property through your createProperty method:

    class Foo{
        public function createProperty($name, $value){
            $this->{$name} = $value;
        }
    }
    
    $foo = new Foo();
    $foo->createProperty('hello', 'something');