Instantiating class by string using PHP 5.3 namespaces

微笑、不失礼 提交于 2019-11-29 23:40:43
$class = 'Application\Log\MyClass';
$object = new $class();

The starting \ introduces a (fully qualified) namespaced identifier, but it's not part of the class name itself.

Another way to achieve the same result but with dynamic arguments is as follows. Please consider the class below as the class you want to instantiate.

<?php

// test.php

namespace Acme\Bundle\MyBundle;

class Test {
    public function __construct($arg1, $arg2) {
        var_dump(
            $arg1,
            $arg2
        );
    }
}

And then:

<?php

require_once('test.php');

(new ReflectionClass('Acme\Bundle\MyBundle\Test'))->newInstanceArgs(['one', 'two']);

If you are not using a recent version of PHP, please use the following code that replaces the last line of the example above:

$r = new ReflectionClass('Acme\Bundle\MyBundle\Test');
$r->newInstanceArgs(array('one', 'two'));

The code will produce the following output:

string(3) "one"
string(3) "two"
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!