PHP中的null合并运算符

王朝学院·作者佚名  2016-08-28  
宽屏版  字体: 小 | 中 | 大 | 超大  

PRoject: blog

target: null-coalesce-Operator-in-php.md

date: 2015-12-30

status: publish

tags:

- Null Coalesce

- PHP

categories:

- PHP

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的错误。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有