首页 > 解决方案 > !empty($variable) 和 count($variable) 在 PHP 中的布尔结果是否总是相等?

问题描述

我需要在 IF 语句中用 !empty($variable) 替换 count($variable) 的出现,而不是

if(count($variable)){

}

我想用

if(!empty($variable)){

}

在确保结果始终相同的同时始终更换它是否安全?

标签: phpcountphp-7php-5.6is-empty

解决方案


测试它

foreach (['', null, 0, 0.0, '0', false, [], new stdClass, 'foo', 1, true, ['bar' => 'baz']] as $val) {
    var_dump($val, count($val), !empty($val));
    echo '-------------', PHP_EOL;
}

这些情况有所不同:

string(0) ""
int(1)
bool(false)
-------------
int(0)
int(1)
bool(false)
-------------
float(0)
int(1)
bool(false)
-------------
string(1) "0"
int(1)
bool(false)
-------------
bool(false)
int(1)
bool(false)

此外,count将触发未定义变量的错误。在 PHP 7.2+ 上,count任何非值也会触发错误Countable(基本上是除array或类之外的所有内容implement Countable)。

所以,如果你能保证你的变量永远是一个数组,那就没有区别了。如果您的变量可以是数组以外的任何内容,包括未定义的,那么您将看到不同结果和触发错误之间的任何地方。

如果您希望您的变量存在并且是一个数组 / Countable,那么如果您的值违反了您的期望,您应该更喜欢count或只是if ($variable)(因为空数组也是虚假的)获得正确的错误消息。


推荐阅读