关于 PHP empty() 函数的规范
首先
本文是为那些容易忘记empty()函数规范或想了解其规范的人撰写的。如果您想看结论,请查看下面的“总结”表格。
在中文中,只需要一种选项来释义”前提”:先决条件。
- PHP8.1
关于empty的规格说明
根据公式文档,empty()的结果似乎与!isset($var) || $var == false相同。
即使变量不存在,也不会发出警告。换句话说,empty()简洁地描述了!isset($var) || $var == false的本质。
为了详细了解empty()的行为,我们想要观察isset()和$var == false的判定各自会产生什么样的结果。
!isset()的行为
首先,关于isset()的行为,当参数是未定义的变量或者null时,它会返回false。而!isset()则是返回相反的结果,即对于未定义的变量和null,它会返回true。
以下是用于确认!isset()函数行为的代码。
<?php
$ary1 = [];
$ary2 = [
'',
"",
[],
true,
false,
0,
1,
'0',
'1',
sqrt(-1), // NANを返す
null,
$foo, // 未定義の変数
$ary1['foo'], // 未定義の配列キー
];
foreach ($ary2 as $value) {
var_dump(!isset($value));
}
处理结果
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
※$fooと$ary[‘foo]を配列にセットしているため、警告文が表示されます。
$ary[‘foo’]についてですが、配列に定義されていないキーにアクセスした場合、未定義の変数にアクセスした時と同じ挙動になるのでtrueになります。
数值和判断结果的表格
$var为false时的行为
我通过下面的代码来确认当用相等运算符“==”将每个值与false进行比较时会得到什么样的结果。
<?php
$ary1 = [];
$ary2 = [
'',
"",
[],
true,
false,
0,
1,
'0',
'1',
sqrt(-1), // NANを返す
null,
$foo, // 未定義の変数
$ary1['foo'], // 未定義の配列キー
];
foreach ($ary2 as $value) {
var_dump($value == false);
}
处理结果
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(true)
bool(false)
bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
※$fooと$ary[‘foo]を配列にセットしているため、警告文が表示されます。
值和判断结果的表格
与!isset()的不同之处在于,当为空字符串、空数组、0或’0’时,其返回true。
总结
以下是每个判断结果的方式:
– !isset():判断变量是否已设置
– $var == false:判断变量是否为假
– empty():判断变量是否为空
只不过根据表格可以看出来,$var == false和empty()的结果完全相同,不同之处在于empty()不会对”未定义的变量”发出警告。
前面解释过的!isset() || $var == false中的!isset()的作用是为了避免对”未定义的变量”发出警告,而判断结果与$var == false完全相同。
结束
非常感谢您一直以来的阅读。
对于语言的详细规范,我们往往需要多次查阅,不是吗、、、
请参考