Php 是否设置了常量,但未定义?

Php 是否设置了常量,但未定义?,php,constants,isset,defined,Php,Constants,Isset,Defined,如果我将常量设置为=”, 如何检查常量中是否有内容? (即查看是否将其设置为空字符串以外的其他值。) defined()不做我想做的事情,因为它已经被定义了(如')。 isset()不适用于常量 有什么简单的方法吗?说明,isset()返回“[…]变量是否已设置且不为空” 常量不是变量,所以不能检查它们。不过,您可以尝试以下方法: define('FOO', 1); if (defined('FOO') && 1 == FOO) { // .... } 因此,当您的常量被定义

如果我将常量设置为=

如何检查常量中是否有内容?
(即查看是否将其设置为空字符串以外的其他值。)

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

有什么简单的方法吗?

说明,
isset()
返回“[…]变量是否已设置且不为空”

常量不是变量,所以不能检查它们。不过,您可以尝试以下方法:

define('FOO', 1);

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

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

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

if(defined('FOO')&&!empty(FOO)) {
  //we have something in here.
}
因为empty还将大多数类似于
false
的表达式(如“0”、0和其他内容,请参阅以了解更多信息)计算为“empty”

您可以尝试:

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']


请参阅。

您可能想指出您正在谈论的语言…哦,哈哈,如果只是做这个技巧,这似乎很正常。这可以关闭。isset在变量情况下甚至没有帮助,因为仍然设置了空变量。isset只删除false,它完全不存在,或者为空。空字符串仍被视为已设置。与defined类似(文档不会说它在NULL上为false)。