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

Kor*_*lis 13 php static-methods yii

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

$class = new "ModelName";
$items = $class::model()->findAll();
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢

Jon*_*Jon 22

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

范围解析运算符的文档:

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

无论如何,您总是可以使用call_user_func:

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