如何查看实例化类中是否定义了常量?
我有:
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中工作。
答案 0 :(得分:4)
使用类名而不是对象变量可能效果更好:
if(defined(get_class($foo).'::BAR')) // Do something