PHP:变量名作为类实例

时间:2010-01-17 20:47:05

标签: php static-methods instantiation php-5.2

我在调用类中的静态函数时遇到使用变量作为类名的问题。我的代码如下:

class test {
     static function getInstance() {
         return new test();
     }
}

$className = "test";
$test = $className::getInstance();

我必须将类名定义为变量,因为类的名称来自数据库,所以我永远不知道要创建实例的类。

注意:目前我收到以下错误:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM 

由于

2 个答案:

答案 0 :(得分:8)

$test = call_user_func(array($className, 'getInstance'));

请参阅call_user_funccallbacks

答案 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和朋友更清晰。