Can we dynamically create and initialize an object in PHP? This is the normal code:
class MyClass{
    var $var1 = null;
    var $var2 = null;
    .
    .
    public function __construct($args){
        foreach($args as $key => $value)
            $this->$key = $value;
    }
}
---------------------
$args = ($_SERVER['REQUEST_METHOD'] == "POST") ? $_POST : $_REQUEST;
$obj = new MyClass($args);
The above code works fine. Please note that the names of REQUEST parameters are accurately mapped with the members of class MyClass.
But can we do something like this:
$class = "MyClass";
$obj = new $class;
If we can do like this, then can we initialize $obj by using $args.
According to this post, $obj = $class should work. But it does not work for me. I tried get_class_vars($obj). It threw an exception.
Thanks
It's more a comment, but I leave it here more prominently:
$class = "MyClass";
$obj = new $class($args);
This does work. See newDocs.
You have to overload some other magic methods:
Please see this codepad to see your code rewritten to work with what you want:
<?php
class MyClass{
    var $properties = array();
    public function __construct($args){
        $this->properties = $args;        
    }
    public function __get($name) {
        echo "Getting '$name'\n";
        if (array_key_exists($name, $this->properties)) {
            return $this->properties[$name];
        }
        return null;
    } 
}
$args = array("key1" => "value1", "key2" => "value2");
$class = "MyClass";
$obj = new $class($args);
echo "key1:". $obj->key1;
?>
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With