PHP7新增的NULL合并运算符??和?:的区别
|
《PHP7新增的NULL合并运算符??和?:的区别》要点: 在PHP7中,新增了两个很有意思的运算符??和 ?: 那??( NULL 合并运算符)和?:的区别是什么? 这两种运算符,略有差别: (1)??是只要前面的变量定义过了(即isset()为真)或前面表达式为真,则返回前面的值。 (2)?:则是运算符前面的表达式或变量值需为真则取前面的值,为假则取后面的值。但前提是前面的变量需要先定义过了已存在。 我们用实例来学习: echo $a ?? 3; //$a未定义不会出错,而是返回3. 只要$a值有了就返回$a的值,哪怕是空值。 echo $_GET['a'] ?? 1; //它相当于:$a = isset($_GET['a']) ? $_GET['a'] : 1; echo $a ?? 3;相当于 echo isset($a)?$a:3; 因此,在语法上简化了不少。 而?:则略有不同,我们把 error_reporting 打开E_ALL: ini_set ('error_reporting',E_ALL);
echo $a ?: 3; //$a未定义提示:Notice: Undefined variable: a,
//如果$a有设置,则$a为真时返回的是前面判断表达式的值,为假时返回3.总结:??和?:不同点:$_GET['a'] ?? 3 不用判断isset($_GET['a']),只要前面变量存在或表达式为真,就返回前面的值。 而对于?: 如果前面表达式的变量没有定义,则会出错。它只取分析前面的表达式是否为真。 因此,推荐使用??。 使用场景实战: 我们经常会取URL中的page参数做为页码,获得这种数值类型的参数,需要做2个判断: 1、是否存在$_GET['page']参数,有则转化为数值,不存在则设为1 2、如果存在,但值不符合要求,比如被人修改为字母,则还是要改为1. 传统写法: $page = !empty($_GET['page']) ? intval ($_GET['page']) :1; #检查是否定义page并转为int if(empty($page)) $page=1; #防止出现字母等参数则page值转为int后为0 echo $page; 现在把上面3行代码用??和?:并成一行。 echo intval ($_GET['page'] ?? 1)?:1; 这样以后取分页参数就简单了吧。 扩展: 所有获取数值类参数都有上面同样的格式,因此,可以封装成函数 /**
* 数值类型的GET参数获取,如分页码,或ID值
* @author http://www.jb51.cc
* @param string $page 参数名,默认是分页码 page
* @param int $minValue 最小值
* @return int
*/
function intGet($page='page' , $minValue=1)
{
return intval ($_GET[$page] ?? $minValue)?:$minValue;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
