关于 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になります。

 

数值和判断结果的表格

値判定結果”false“”false[]falsetruefalsefalsefalse0false1false‘0’false‘1’falseNANfalsenulltrue未定義変数true未定の配列キー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]を配列にセットしているため、警告文が表示されます。

值和判断结果的表格

値判定結果”true“”true[]truetruefalsefalsetrue0true1false‘0’true‘1’falseNANfalsenulltrue未定義変数true未定の配列キーtrue

与!isset()的不同之处在于,当为空字符串、空数组、0或’0’时,其返回true。

总结

以下是每个判断结果的方式:
– !isset():判断变量是否已设置
– $var == false:判断变量是否为假
– empty():判断变量是否为空

値!isset()$var == falseempty()”falsetruetrue“”falsetruetrue[]falsetruetruetruefalsefalsefalsefalsefalsetruetrue0falsetruetrue1falsefalsefalse‘0’falsetruetrue‘1’falsefalsefalseNANfalsefalsefalsenulltruetruetrue未定義変数truetruetrue未定の配列キーtruetruetrue

只不过根据表格可以看出来,$var == false和empty()的结果完全相同,不同之处在于empty()不会对”未定义的变量”发出警告。
前面解释过的!isset() || $var == false中的!isset()的作用是为了避免对”未定义的变量”发出警告,而判断结果与$var == false完全相同。

结束

非常感谢您一直以来的阅读。
对于语言的详细规范,我们往往需要多次查阅,不是吗、、、

请参考

 

广告
将在 10 秒后关闭
bannerAds