有时我会迷失方向,试图弄清楚在给定情况下要使用哪种比较操作。isset()仅适用于未初始化或显式为null的值。传递/分配空值是确保逻辑比较按预期工作的好方法。
不过,仍然很难考虑,因此这里有一个简单的矩阵,用于比较不同操作将如何评估不同的值:
| | ===null | is_null | isset | empty | if/else | ternary | count>0 |
| ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
| $a; | true | true | | true | | | |
| null | true | true | | true | | | |
| [] | | | true | true | | | |
| 0 | | | true | true | | | true |
| "" | | | true | true | | | true |
| 1 | | | true | | true | true | true |
| -1 | | | true | | true | true | true |
| " " | | | true | | true | true | true |
| "str" | | | true | | true | true | true |
| [0,1] | | | true | | true | true | true |
| new Class | | | true | | true | true | true |
为了适合桌子,我稍微压缩了标签:
$a; 引用已声明但未分配的变量
第一列中的所有其他内容均指分配的值,例如:
$a = null;
$a = [];
$a = 0;
…
这些列指的是比较操作,例如:
$a === null
isset($a)
empty($a)
$a ? true : false
…
所有结果均为布尔值,true已打印且false被省略。
您可以自己运行测试,请检查以下要点:https :
//gist.github.com/mfdj/8165967