доступ к статическим методам с использованием имени переменной класса (PHP) - PullRequest
15 голосов
/ 20 февраля 2011

Я пытаюсь получить доступ к статическому методу, но использую переменную в качестве имени класса.Это возможно?Кажется, у меня проблемы с этим.Я хочу иметь возможность сделать что-то вроде этого:

class foo {
    public static function bar() {
        echo 'test';
    }
}

$variable_class_name = 'foo';
$variable_class_name::bar();

И я хочу быть в состоянии сделать то же самое, используя статические переменные.

Ответы [ 2 ]

19 голосов
/ 21 февраля 2011

Этот синтаксис поддерживается только в PHP 5.3 и более поздних версиях. Предыдущие версии не понимают этот синтаксис, поэтому ваша ошибка синтаксического анализа (T_PAAMAYIM_NEKUDOTAYIM относится к оператору ::).

В предыдущих версиях вы можете попробовать call_user_func(), передав ему массив, содержащий имя класса и имя его метода:

$variable_class_name = 'foo';
call_user_func(array($variable_class_name, 'bar'));
7 голосов
/ 21 февраля 2011

Вы можете использовать отражение для PHP 5.1 и выше:

class foo {
    public static $bar = 'foobar';
}

$class = 'foo';
$reflector = new ReflectionClass($class);
echo $reflector->getStaticPropertyValue('bar');

> foobar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...