为什么这行代码不能像在 JS 中那样在 php 中工作:
$id = [];
$id = null || [];
if (count($id)) {
echo 'd';
}
为什么$id仍然是 null 而不是空数组[]?因此count()给出错误。
为什么这行代码不能像在 JS 中那样在 php 中工作:
$id = [];
$id = null || [];
if (count($id)) {
echo 'd';
}
为什么$id仍然是 null 而不是空数组[]?因此count()给出错误。
在 PHP 中,逻辑运算符总是||返回一个布尔值,即使给定一个非布尔值输出。
所以你的陈述被评估为“要么是要么是null真的[]?” 由于两者null和一个空数组都评估为 false,因此结果为 boolean false。
然而,有两个运算符会做类似于 JS 的事情||:
$a ?: $b是$a ? $a : $b;的简写 换句话说,它评估$a它是否“真实”,或者$b如果不是(这与它作为速记的三元运算符一起记录)$a ?? $b相似,但检查null而不是“真实性”;它等效于isset($a) ? $a : $b(这称为空合并运算符)<?php
// PHP < 7
$id = isset($id) ? $id : [];
// PHP >= 7
$id = $id ?? [];
自 PHP 7 及更高版本起
Null Coalesce Operator
另一个有用的链接
小心!
我发现 PHP 的处理empty非常值得怀疑:
empty($unsetVar)== true(太棒了,无需检查isset,因为警告被抑制了!)empty(null)== 真empty('')== 真一切都好,直到我们开始胡说八道:
empty(false)== 真的。等等,什么???你一定是在开玩笑吧。在任何世界都不应false被视为与没有价值相同的东西!错误的断言没有什么“空洞的”。由于这种逻辑谬误,您不能使用empty检查任何可能具有VALUE的变量false。
在我的项目中,我使用静态方法:
public static function hasValue($value) {
return isset($value) && !is_null($value) && $value !== '';
}
当然,使用这种方法,我不再得到免费的警告抑制了empty,所以现在我也不得不记住用通知/警告抑制运算符调用上面的方法@:
if(self::hasValue(@$possiblyUnsetVar)) {}
非常令人沮丧。