详解PHP中的null合并运算符_php实例
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';
上一篇: 【PHP ThinkPHP框架】小bug汇总[更新]
下一篇: PHP中的魔术方法总结 :
推荐阅读
-
详解PHP中的null合并运算符_php实例
-
PHP中逻辑运算符and/or与||/&&的一个坑
-
php扩展中c++单例模式的全局对象实例被生成多个子进程销毁,为啥?该如何解决
-
深入理解PHP中的count函数_php实例
-
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例,转义字符的用法_PHP教程
-
PHP中捕获超时事件的方法实例_PHP教程
-
详解WordPress开发中get_header()获取头部函数的用法_PHP
-
用php制作简单分页(从数据库读取记录)的方法详解_php实例
-
以实例全面讲解PHP中多进程编程的相关函数的使用
-
PHP程序中的常见漏洞详解