Доступ к статическим методам с использованием имени класса переменной (PHP)
Я пытаюсь получить доступ к статическому методу, но используя переменную как имя класса. Это возможно? Кажется, у меня проблемы с этим. Я хочу иметь возможность сделать что-то вроде этого:
class foo {
public static function bar() {
echo 'test';
}
}
$variable_class_name = 'foo';
$variable_class_name::bar();
И я хочу иметь возможность делать подобное, используя статические переменные.
Ответы
Ответ 1
Этот синтаксис поддерживается только в PHP 5.3 и более поздних версиях. Предыдущие версии не понимают этот синтаксис, поэтому ваша ошибка синтаксического анализа (T_PAAMAYIM_NEKUDOTAYIM
относится к оператору ::
).
В предыдущих версиях вы можете попробовать call_user_func()
, передав ему массив, содержащий имя класса и его имя метода:
$variable_class_name = 'foo';
call_user_func(array($variable_class_name, 'bar'));
Ответ 2
Вы можете использовать reflection для PHP 5.1 и выше:
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass($class);
echo $reflector->getStaticPropertyValue('bar');
> foobar