php - PHP 中 !empty($variable) 和 count($variable) 的 bool 结果总是相等吗?

标签 php count php-7 php-5.6 is-empty

我需要替换出现的 IF 语句中的 count($variable) 和 !empty($variable) 所以而不是

if(count($variable)){

}

我想使用

if(!empty($variable)){

}

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

最佳答案

Test it :

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 将触发 undefined variable 的错误。在 PHP 7.2+ 上,count 还会针对任何非 Countable 值(基本上是除 array 类之外的所有内容)触发错误。实现可数)。

因此,如果您可以保证您的变量始终是一个数组,那么没有什么区别。如果您的变量可以是数组以外的任何内容(包括 undefined variable ),那么您将看到不同结果和触发错误之间的任何位置。

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

关于php - PHP 中 !empty($variable) 和 count($variable) 的 bool 结果总是相等吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58853594/

相关文章:

count - 如何计算谷歌电子表格中逗号分隔数字的数量?

php - 与 PHP 正则表达式匹配行尾的区别

php - 电子邮件 .. 我应该能够这样做吗?

php - Laravel 拒绝用户 'root' @'localhost' 访问(使用密码 : YES) in laravel 5. 7

php - fatal error : Call to a member function bind_param() on a non-object when updating

php - "An error occurred while handling another error: yii\web\HeadersAlreadySentException"

sql - 需要有关看似简单的 SQL 查询的提示

mysql计算不重叠的UNION结果

php - 使用 PHPUnit 5.5.4 通过 dataProvider 动态访问类常量

php - 陷入从变量 CodeIgniter 回显数据的状态