• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解PHP中的null合并运算符

php 搞代码 3年前 (2022-01-23) 24次浏览 已收录 0个评论

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 = <div style="color:transparent">!本文来源gaodai.ma#com搞##代!^码网(</div><sup>搞gaodaima代码</sup>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';

以上就介绍了详解PHP中的null合并运算符,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解PHP中的null合并运算符

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址