Как я могу увидеть, определена ли константа в экземпляре класса?
Я имею:
Class foo {
const BAR = 'baz';
}
и позже $foo
передается в функцию в другом классе, где я проверяю, установлен ли он, и использую его значение (или значение по умолчанию):
Class abc {
public function xyz($foo)
{
if (defined($foo::BAR)) {
$var = $foo::BAR;
} else {
$var = 'default';
}
}
}
Но независимо от того, что я делаю, я не могу понять, определена ли константа. Он либо определен и работает, либо не определен и выдает FatalError: Undefined class constant 'BAR'
прежде чем мы сможем добраться до else
,
Это различные дампы (которые я могу вспомнить) и их результаты:
$foo::BAR | string 'baz' (length=3)
$foo->BAR | null
$foo::BAR !== null | boolean true (when set) Error (when unset)
defined($foo::BAR) | boolean false
defined('$foo::BAR') | boolean false
defined("$foo::BAR") | boolean false
defined('BAR', $foo) | Error
Если это поможет, я работаю в Laravel 5.4 и PHP 5.6.
Вероятно, лучше работает с именем класса вместо объектной переменной:
if(defined(get_class($foo).'::BAR')) // Do something
Других решений пока нет …