php - !empty($variable) 和 count($variable) 在 PHP 中的布尔结果是否总是相等?
问题描述
我需要在 IF 语句中用 !empty($variable) 替换 count($variable) 的出现,而不是
if(count($variable)){
}
我想用
if(!empty($variable)){
}
在确保结果始终相同的同时始终更换它是否安全?
解决方案
测试它:
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)
(因为空数组也是虚假的)获得正确的错误消息。
推荐阅读
- java - 使用依赖管理访问 Maven 属性
- django - django.core.exceptions.AppRegistryNotReady:应用程序尚未加载在 django、celery 中出现错误
- javascript - 当下拉关闭时,垫选择点击外部不起作用
- arrays - 从 JSON 响应中读取对象并保存在可变数组中
- php - laravel 让用户进入控制器中间件
- ios - iOS:AVCaptureSession 不会录制超过 11 秒的音频
- git - Git 第一次推送到分支
- javascript - 跟踪用户在网站中完成特定操作的时间
- c++ - 同一个 boost tcp 套接字对象上的多个连接
- javascript - 如何在节点 js 中使用回调函数返回 api 响应