时间:2021-05-25
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';声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
注意啦,C#中的??运算符是和?:运算符是不同的,这两者是有区别的。 ??运算符称为null合并运算符,用于定义null值的类型和引用类型的默认值。 只
空值合并运算符和区间运算符今天主要看的内容是Swift中的基本运算符。记录一下。NilCoalescingOperatora??b中的??就是是空值合并运算符,
在c#中"??"为空合并运算符,用于定义可空类型和引用类型的默认值。(1)如果此运算符的左操作数不为null,则此运算符将返回左操作数;否则返回右操作数。例:a
??运算符(NULL合并运算符)把这个放在第一个说是因为我觉得它很有用。用法:$a=$_GET['a']??1;它相当于:
1.??运算符(NULL合并运算符)把这个放在第一个说是因为我觉得它很有用。用法:$a=$_GET['a']??1;它相当于: