如果是常量,但没有定义?

时间:2011-06-22 21:09:15

标签: php constants isset defined

如果我将常数设为=''; 如何检查是否有内部的东西?

defined(),不能像我希望的那样工作,因为它已被定义 isset()不适用于常量

有什么简单的方法吗?

3 个答案:

答案 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