2013-05-26 2 views
1

У меня есть класс с именем List, этот класс имеет статический метод. Когда я звоню:Php - Статическая функция класса с именем List

List::method(); 

Следующая ошибка:

syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting '(' 

Считает ли PHP Я хочу, чтобы позвонить в родной список функций()? Нужно ли переименовывать класс?

+2

'list' является зарезервированным словом PHP .... потому что вы не можете иметь имя класса, которое соответствует существующей функции или конструкции –

+0

Получил это: https://bugs.php.net/bug.php?id= 40790 – user2419849

+0

Устойчивый вопрос, потому что он хороший для будущих посетителей. –

ответ

1

Да, PHP пытается вызвать нативную функцию
T_PAAMAYIM_NEKUDOTAYIM означает неожиданное двойное двоеточие, поэтому, когда вы переименовать класс все должно быть AllRight

2

Да и нет. list не является функцией, а language construct. Таким образом, это «зарезервированное слово», то есть во время компиляции он будет обрабатываться по-разному с помощью токенизатора.

Компилятор ожидает использования токена list, как в языковой конструкции, поэтому с сообщением (. Вместо этого вы кормите его оператором области, что означает, что он запутывается. Простейшее решение переименовать класс (это слишком общий в любом случае) или для предотвращения конфликтов пространства имен, либо поставив класс List в своем собственном пространстве имен, либо в явном виде ссылки на глобальное пространство имен:

\List::method(); 

Это должно работать, а также от PHP 5.3 вверх - он сообщает компилятору заглянуть в глобальное пространство имен, где он автоматически ожидает имя класса после обратного слэша.

+0

Я столкнулся с этой проблемой (снова) и наткнулся на ваш ответ в процессе поиск ошибок/запросов функций и т.п. Обсуждая это в комнате PHP здесь, я проверил этот код. Ваше предложение использовать разрешение пространства имен не работает в 5.4. Он генерирует ожидаемую ошибку: «Ошибка анализа: синтаксическая ошибка, неожиданный« Список »(T_LIST), ожидающий идентификатор (T_STRING) в ...' –

+1

Вы правы, он также нарушен в 5.5. К сожалению, создание правильного токенизатора не является частью чьей-либо работы в команде PHP, так что на самом деле на какое-то время будет невозможно использовать слишком длинный список зарезервированных слов в качестве имен идентификаторов. –

Смежные вопросы