首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP?,?:和??=的区别

PHP?,?:和??=的区别
EN

Stack Overflow用户
提问于 2022-05-16 22:15:44
回答 1查看 143关注 0票数 1

我不太清楚的是,???:??=在PHP中有何不同?

我知道??=只是在PHP7.4中添加的。我还知道??用于检查空值,但是?:似乎也检查空值,所以我不完全确定两者之间的区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 00:06:40

把以前的问题中所有的答案结合起来。使用??,您可以检查是否存在,而不是null,使用?:,您可以检查true/false

代码语言:javascript
复制
$result = $a ?? $b

与以下相同:

代码语言:javascript
复制
if (isset($a) && !is_null($a)) {
    $result = $a;
} else {
    $result = $b;
}

??=??的快捷方式,它的工作方式类似于.=+=,这意味着可以缩短

代码语言:javascript
复制
$a = $a ?? $b;

代码语言:javascript
复制
$a ??= $b;

?:是三元运算符的快捷方式,也是一种快捷方式:

代码语言:javascript
复制
if ($a) {
    $result = $a;
} else {
    $result = $b;
}

与以下相同:

代码语言:javascript
复制
$result = $a ? $a : $b;

与以下相同:

代码语言:javascript
复制
$result = $a ?: $b;

您可以将第一个操作数描述为:第一个操作数是要检查的值,如果这个操作数有用,则接受它,如果不是,则将第二个操作数作为默认值。

你可以像这样把它们连在一起:

代码语言:javascript
复制
$user = $_POST['user'] ?? $_SESSION['user'] ?? $_COOKIE['user'] ?? '';

这意味着:如果您只是因为登录而在POST数组中获得用户名,那么可以接受它(如果没有),查看用户是否已经登录和会话,如果是,如果没有,则可能有一个用户在Cookies中(上次登录时选中了“me”复选框),如果也失败了,那么将其保留为空。

当然你也要检查密码。;-)

编辑:我经常使用?:操作符来确保变量中有特定的数据类型。如果成功,有很多PHP函数可能返回一个字符串或数组,但如果出现错误,则返回false。与其结果为false,不如使用空字符串或空数组更一致。例如,scandir应该返回一个数组,但是如果发生错误,则返回false。所以你可以这么做:

代码语言:javascript
复制
$files = scandir('/some/random/folder') ?: [];

那么$files将永远是一个数组,即使scandir失败了。好吧,那么它是一个空数组,但可能比稍后检查false更好。事实上,我们已经付出了很小的努力。然后,您可以使用foreach循环,而不需要包装if。如果scandir失败,则数组为空,循环将什么也不做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72266190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档