Подтвердить что ты не робот

Вызов статического метода из имени строки в PHP

Мне нужно вызвать статический метод класса, но у меня есть только имя класса, а не его экземпляр. Я делаю это так.

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

Он работает на моем компьютере, но когда я перехожу на сервер, он бросает unexpected T_PAAMAYIM_NEKUDOTAYIM, поэтому я думаю, что он действительно ожидает, что модель будет переменной вместо метода.

PS: Если это помогает, это структура Yii, поэтому, если есть другой способ вызвать функции find(), это нормально для меня.

Заранее спасибо

4b9b3361

Ответ 1

Это связано с тем, что ваш сервер запускает версию PHP раньше 5.3.0, в которой этот синтаксис не поддерживается.

Из документации по оператор разрешения области видимости:

Начиная с PHP 5.3.0, можно ссылаться на класс, используя переменная. Значение переменной не может быть ключевым словом (например, self, parent и статические).

В любом случае вы всегда можете использовать call_user_func:

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