Почему следующий код дает мне исключение, говоря, что моя константа не определена
MyClass::myFunction(MyClass::MY_CONST); // THIS GIVES THE ERROR
// This is the class..
class MyClass {
const MY_CONST = 'BLA';
public static function myFunction($key) {
if (!defined($key)) {
throw new Exception("$key is not defined as a constant");
}
}
}
Я пробовал с
if (!defined($key)) {}
if (!defined(self::$key)) {}
if (!defined(__CLASS__ . $key)) {}
Вы должны передать это как строку:
public static function myFunction($key) {
if (!defined('self::'.$key)) {
throw new Exception("$key is not defined as a constant");
}
}MyClass::myFunction('MY_CONST');
Как указывает Даниэле Д, для начала вы называете это значение константой, а не ее именем.
И определенному нужен другой синтаксис для параметра при проверке констант класса, а не определенных констант. Так должно быть
if (!defined('self::' . $key)) {
Вам нужно передать все имя класса и константу в виде строки.
Подобно:
MyClass::myFunction('MyClass::MY_CONST');