如果为常量设置,但未定义


If isset for constants, but not defined?

如果我将常量设置为=''
如何检查常量内部是否有内容

defined()不做我想做的事情,因为它已经被定义(作为''
isset()不适用于常量。

有什么简单的方法吗?

手册中说,isset()返回是否设置了"[…]变量且该变量不是NULL"。

常量不是变量,所以你不能检查它们。不过,你可以试试这个:

define('FOO', 1);
if (defined('FOO') && 1 == FOO) {
// ....
}

因此,当您的常量被定义为空字符串时,您必须首先检查它是否真的是defined,然后检查它的值('' == MY_CONSTANT)。

为了检查里面是否有东西,您可以使用(自PHP 5.5以来)空函数。为了避免错误,我还会检查它是否存在。

if(defined('FOO')&&!empty(FOO)) {
  //we have something in here.
}

由于empty也计算大多数类似false的表达式(如"0"、0和其他内容,请参阅http://php.net/manual/de/function.empty.php更多)作为"空"

你可以试试:

if(defined('FOO') && FOO ) {
  //we have something in here.
}

这应该适用于更多的版本(可能在任何可以运行yoda条件的地方)

你可以做一个更严格的检查:

if(defined('FOO') && FOO !== '') {
  //we have something in here.
}

假设您分配常量(它不是系统定义的常量),请使用以下内容:

if(array_key_exists("MY_CONSTANT", get_defined_constants(true)['user'])){
    echo MY_CONSTANT; //do stuff
}

这是因为get_defined_constants(true)的数组结果是一个数组——所有定义的常量,并且您定义的任何东西都存储在子数组['user']中。

请参阅手册。