Почему я не могу напрямую использовать возвращаемые значения функций в качестве динамических имен классов в PHP?

Начиная с PHP 5.3, в качестве имени класса можно использовать переменную не только для создания экземпляра объекта, но даже для статических методов:

$className = 'My\Name\Spaced\Thing';
$thing = $className::foo('hello world');

Однако, если я пытаюсь использовать возвращаемое значение функции или метода вместо фактической переменной, я получаю ошибку:

function getClassName() 
{
    return 'My\Name\Spaced\Thing';
}

// Raises "syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)"
$thing = getClassName()::foo('hello world');

Это, с другой стороны, работает просто отлично:

$className = getClassName();
$thing = $className::foo('hello world');

Что дает? Я только что нашел ошибку в синтаксическом процессоре PHP (5.6)?

1 ответ

Решение

Я не знаю, назову ли я это "ошибкой", но это определенно идиосинкразия PHP до PHP 7. Эта проблема и целый ряд подобных проблем были решены с помощью унифицированного синтаксиса переменных RFC.

Другие вопросы по тегам