从PHP中的字符串名称调用静态方法

时间:2012-07-10 10:04:28

标签: php yii static-methods

我需要调用类的静态方法,但我只有一个类名,而不是它的一个实例。我是这样做的。

$class = new "ModelName";
$items = $class::model()->findAll();

它可以在我的计算机上运行,​​但是当我移动到服务器时,它会抛出unexpected T_PAAMAYIM_NEKUDOTAYIM,所以我认为它实际上期望模型是变量而不是方法。

PS:如果它有帮助,那就是Yii框架,所以如果有另一种方法来调用find()函数,那对我来说没问题。

提前致谢

1 个答案:

答案 0 :(得分:22)

这是因为您的服务器运行的是早于5.3.0的PHP版本,其中不支持此语法。

来自scope resolution operator的文档:

  

从PHP 5.3.0开始,可以使用a引用该类   变量。变量的值不能是关键字(例如self,parent   和静态)。

无论如何,您始终可以使用call_user_func

$class = "ModelName"; // the "new" in your example was a typo, right?
$items = call_user_func(array($class, 'model'))->findAll();