Call static method from a string name in PHP

2020-08-11 06:22发布

问题:

I need to call a static method of a class, but I only have a classname, not an instance of it. I am doing it this way.

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

It works on my computer, but when I move to the server, it throws an unexpected T_PAAMAYIM_NEKUDOTAYIM, so I think it actually expects model to be a variable instead of a method.

PS: If it helps, it's Yii framework, so if there's another way to call the find() functions, it's ok to me.

Thanks in advance

回答1:

This is because your server runs a version of PHP earlier than 5.3.0, in which this syntax is not supported.

From the documentation on the scope resolution operator:

As of PHP 5.3.0, it's possible to reference the class using a variable. The variable's value can not be a keyword (e.g. self, parent and static).

In any case, you can always use call_user_func:

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