6

如果我将一个常量设置为 = ''
我如何检查常量里面是否有东西?
(即查看它是否设置为空字符串以外的内容。)

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

有什么简单的方法吗?

4

3 回答 3

14

The manual says, that isset() returns whether a "[...] variable is set and is not NULL".

Constants aren't variables, so you can't check them. You might try this, though:

define('FOO', 1);

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

So when your constant is defined as an empty string, you'll first have to check, if it's actually defined and then check for its value ('' == MY_CONSTANT).

于 2011-06-22T21:19:44.537 回答
6

为了检查里面是否有东西,你可以使用(从 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更多)评估为 'empty'

你可以试试:

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

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

要进行更严格的检查,您可以执行以下操作:

if(defined('FOO') && FOO !== '') {
  //we have something in here.
}
于 2016-02-04T08:15:10.800 回答
0

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

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

这是有效的,因为数组结果get_defined_constants(true)是一个包含所有已定义常量的数组,并且您定义的任何内容都存储在 sub-array['user']中。

请参阅手册

于 2017-09-17T18:22:21.633 回答