加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详解PHP中的null合并运算符

发布时间:2022-07-16 10:47:34 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP中的null合并运算符的相关资料,需要的朋友可以参考下,null合并运算符是一个好东西,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值,比如在js中可以用||来搞: function setSomething(a){ a = a || some-de
  这篇文章主要介绍了PHP中的null合并运算符的相关资料,需要的朋友可以参考下,null合并运算符是一个好东西,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值,比如在js中可以用||来搞:
 
  function setSomething(a){
    a = a || 'some-default-value';
    // ...
  }
  而在PHP中,可惜PHP的||总是返回true或false,无法这样来搞。
 
  PHP7才正式加入了??这个运算符:
 
  // 获取user参数的值(如果为空,则用'nobody')
  $username = $_GET['user'] ?? 'nobody';
  // 等价于:
  $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
  PHP7 估计还有很长时间才能用到生产环境中,那在目前的PHP5中有没有替代方案呢?
 
  据研究,完全有个非常便捷的替代方案:
 
  // 获取user参数的值(如果为空,则用'nobody')
  $username = @$_GET['user'] ?: 'nobody';
  // 等价于:
  $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';

(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读