我无法解决通过使用字符串变量和PHP 5.3实例化新类的问题。命名空间。例如,这有效;
$class = 'Reflection';
$object = new $class();
但是,这不是;
$class = '\Application\Log\MyClass';
$object = new $class();
引发致命错误,指出找不到该类。但是,如果使用FQN,显然可以实例化它;即]
$object = new \Application\Log\MyClass;
我发现这在PHP 5.3.2-1上是相同的,但在更高版本中不是。有没有解决的办法?
$class = 'Application\Log\MyClass';
$object = new $class();
[\
开头引入了(完全限定的)命名空间标识符,但它不是类名本身的一部分。
获得动态结果的相同结果的另一种方法如下。请考虑以下类作为您要实例化的类。
<?php
// test.php
namespace Acme\Bundle\MyBundle;
class Test {
public function __construct($arg1, $arg2) {
var_dump(
$arg1,
$arg2
);
}
}
然后:
<?php
require_once('test.php');
(new ReflectionClass('Acme\Bundle\MyBundle\Test'))->newInstanceArgs(['one', 'two']);
如果您未使用最新版本的PHP,请使用以下代码替换上面示例的最后一行:
$r = new ReflectionClass('Acme\Bundle\MyBundle\Test');
$r->newInstanceArgs(array('one', 'two'));
该代码将产生以下输出:
string(3) "one"
string(3) "two"
我遇到了同样的问题,并且找到了解决该问题的方法。可能效率不是很高,但至少可以起作用。
function getController($controller)
{
return new $controller;
}
$object = getController('Application\Log\MyClass');