我不太清楚, PHP 中的??、?:和有何??=不同?
我知道??=是在PHP7.4中才添加的。我也知道这??是为了检查空值,但?:似乎也检查空值,所以我不完全确定其中的区别。
Ara*_*nxo 25
结合之前问题中已经做出的所有答案。和??你一起检查存在和不存在null,和?:你一起检查true/false。
$result = $a ?? $b
Run Code Online (Sandbox Code Playgroud)
是相同的:
if (isset($a) && !is_null($a)) {
$result = $a;
} else {
$result = $b;
}
Run Code Online (Sandbox Code Playgroud)
这??=是一个快捷方式??,它的工作方式类似于.=或+=,这意味着您可以缩短
$a = $a ?? $b;
Run Code Online (Sandbox Code Playgroud)
到
$a ??= $b;
Run Code Online (Sandbox Code Playgroud)
这?:是三元运算符的快捷方式,也是一个快捷方式:
if ($a) {
$result = $a;
} else {
$result = $b;
}
Run Code Online (Sandbox Code Playgroud)
是相同的:
$result = $a ? $a : $b;
Run Code Online (Sandbox Code Playgroud)
是相同的:
$result = $a ?: $b;
Run Code Online (Sandbox Code Playgroud)
您都可以将其描述为:第一个操作数是要检查的值,如果该操作数有用,则采用它,如果没有,则采用第二个操作数作为默认值。
您可以像这样连接它们:
$user = $_POST['user'] ?? $_SESSION['user'] ?? $_COOKIE['user'] ?? '';
Run Code Online (Sandbox Code Playgroud)
意思是这样的:如果你因为刚刚登录而在POST数组中获取了用户名,好的,就拿走它,如果没有,看看用户是否已经登录并在会话中,如果是,就拿走它,如果没有,也许我们在 Cookie 中有一个用户(上次登录时选中了“记住我”复选框),如果这也失败,那么将其留空。
当然你也必须检查密码。;-)
编辑:我?:经常使用运算符来确保变量中具有某种数据类型。有很多 PHP 函数如果成功则返回字符串或数组,但false如果发生错误则返回字符串或数组。使用空字符串或空数组比结果为 false 更一致。例如,scandir应该返回一个数组,但false如果发生错误则返回。所以你可以这样做:
$files = scandir('/some/random/folder') ?: [];
Run Code Online (Sandbox Code Playgroud)
即使失败,那么也$files将始终是一个数组scandir。好吧,那么它是一个空数组,但也许比稍后检查更好false。事实上,我们已经用很少的努力做到了。然后您可以使用foreach循环而无需进行一些包装if。如果scandir失败,数组为空,循环将不执行任何操作。
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |