如果我将常数设为=''; 如何检查是否有内部的东西?
defined()
,不能像我希望的那样工作,因为它已被定义
isset()
不适用于常量
有什么简单的方法吗?
答案 0 :(得分:11)
manual说,isset()
返回“[...]变量是否设置且不是NULL”。
常量不是变量,因此您无法检查它们。不过你可以试试这个:
define('FOO', 1);
if (defined('FOO') && 1 == FOO) {
// ....
}
因此,当您的常量被定义为空字符串时,您首先必须检查它是否为defined
,然后检查其值('' == MY_CONSTANT
)。
答案 1 :(得分:2)
用于检查是否有内容,您可以使用(自PHP 5.5起)空函数。为了避免错误,我还会检查它是否存在。
if(defined('FOO')&&!empty(FOO)) {
//we have something in here.
}
由于空还会评估大多数false
- 类似的表达式(例如&#39; 0&#39;,0和其他内容,请参阅http://php.net/manual/de/function.empty.php了解更多信息)为&#39;空&#39; < / p>
你可以尝试:
if(defined('FOO') && FOO ) {
//we have something in here.
}
这可能适用于更多版本(可能在任何地方都可以运行yoda条件)
您可以执行更严格的检查:
if(defined('FOO') && FOO !== '') {
//we have something in here.
}
答案 2 :(得分:0)
假设您分配常量(并且它不是系统定义的常量),请使用以下命令:
if(array_key_exists("MY_CONSTANT", get_defined_constants(true)['user'])){
echo MY_CONSTANT; //do stuff
}
这是有效的,因为get_defined_constants(true)
的数组结果是所有已定义常量的数组,您定义的任何内容都存储在子数组['user']
中。
请参阅manual。