Увидел это во время некоторых исследований, хотя я знаю, что это удар, я подумал, что лучше проясню это.
empty()
не функция, а языковая конструкция. Это означает, что лежащий в основе код синтаксического анализатора отличается от кода синтаксического анализа аргументов, отправляемых обычным функциям или методам. Поначалу это может показаться противоречивым, когда вы сталкиваетесь с подобными сообщениями об ошибках, однако давайте немного разберем их.
empty()
ожидает проверки чего-то переменного; константа не является переменной, поэтому она не включена в список возможных синтаксисов, которые могут быть переданы этой конструкции, что имеет смысл, поскольку в противном случае вы бы делали что-то нелогичное (проверяя пустоту в константе).
Единственные другие возможные переменные, которые у нас есть в PHP, это старые добрые переменные и свойства класса, так как они взаимозаменяемы, соответствующие синтаксисы могут быть представлены так:
* * 1010
Это означает, что если вы передаете константу, PHP будет читать это как имя класса и, следовательно, ожидает токен двойного двоеточия '::
', поэтому и эта ошибка имеет смысл.
Надеюсь, это было несколько проницательно; -)