Синтаксис — Почему я не могу напрямую использовать возвращаемые функции значения в качестве динамических имен классов в 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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]