www.adminn.cn
站长正能量分享网!

详解PHP中的null合并运算符

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

这篇文章主要介绍了PHP中的null合并运算符的相关资料,需要的朋友可以参考下,null合并运算符是一个好东西,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值,比如在js中可以用||来搞:

  1. function setSomething(a){ 
  2.   a = a || 'some-default-value'
  3.   // … 

而在PHP中,可惜PHP的||总是返回true或false,无法这样来搞。

PHP7才正式加入了??这个运算符:

  1. // 获取user参数的值(如果为空,则用'nobody') 
  2. $username = $_GET['user'] ?? 'nobody'
  3. // 等价于: 
  4. $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'

PHP7 估计还有很长时间才能用到生产环境中,那在目前的PHP5中有没有替代方案呢?

据研究,完全有个非常便捷的替代方案:

  1. // 获取user参数的值(如果为空,则用'nobody') 
  2. $username = @$_GET['user'] ?: 'nobody'
  3. // 等价于: 
  4. $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'

— 运行此代码: https://3v4l.org/aDUW8

瞪大了眼睛看,跟前面的PHP7的例子差不多,主要是把 ?? 替换为了 ?: 。 这个是个什么鬼呢?其实这就是 (expr1) ? (expr2) : (expr3) 表达式的省略模式:

表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

— http://php.net/manual/zh/language.operators.comparison.php

当然,这个替代方案也不是完美的 —— 如果 $_GET 中没有 'user',会有一条 Notice: Undefined index: user 的错误,所以需要用@来抑制这个错误,或者关闭 E_NOTICE 的错误。

ps:PHP7 null合并运算符 告别isset()

以前的写法

$info = isset($_GET['email']) ? $_GET['email'] : ‘noemail';

现在直接这样写就可以了

$info = $_GET['email'] ?? noemail;

还可以这样连写使用

$info = $_GET['email'] ?? $_POST['email'] ?? ‘noemail';

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《详解PHP中的null合并运算符》
文章链接:https://www.adminn.cn/news/34504.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏