我在调用类中的静态函数时遇到使用变量作为类名的问题。我的代码如下:
class test {
static function getInstance() {
return new test();
}
}
$className = "test";
$test = $className::getInstance();
我必须将类名定义为变量,因为类的名称来自数据库,所以我永远不知道要创建实例的类。
注意:目前我收到以下错误:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
由于
答案 0 :(得分:8)
$test = call_user_func(array($className, 'getInstance'));
答案 1 :(得分:0)
您可以使用reflection API,这样可以执行以下操作:
$className = 'Test';
$reflector = new ReflectionClass($className);
$method = $reflector->getMethod('getInstance');
$instance = $method->invoke(null);
甚至:
$className = 'Test';
$reflector = new ReflectionClass($className);
$instance = $reflector->newInstance();
// or $instance = $reflector->newInstanceArgs([array]);
// or $instance = $reflector->newInstanceWithoutConstructor();
对我而言,两者似乎都比直接将字符串的值解释为类名或使用call_user_func
和朋友更清晰。