Как проверить, определена ли константа из другого класса?

Как я могу увидеть, определена ли константа в экземпляре класса?

Я имею:

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.

2

Решение

Вероятно, лучше работает с именем класса вместо объектной переменной:

if(defined(get_class($foo).'::BAR')) // Do something
4

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector