虽然很久之前就已经把生产环境换成了PHP7,但是一直都是享受这PHP7的性能红利,而一直没有多少使用到PHP7的新特性,新语法。直到最近写另一个项目的时候看到开源代码里出现了一个未曾相识的符号,才意识到,PHP7已经很久了,还没有具体了解过,今天就来记录一下,PHP7中新版本的三元运算符的使用。
在PHP5中,三元运算符是长这样的:
$value=$bool?"true":"false";
这句代码的意思是给$value赋值,如果$bool的值是真,则把"true"赋值给$value,否则就把"false"赋值给$value。
在使用大量的开发过程中,我们经常会用三元运算符来做其他的事情,比如这样
$value=$a?$a:"未设置变量";
$value=trim($a)?trim($a):"0";
可以看到,很多时候,我们并不是让他来选择值,而是当做一个判断来使用。于是在PHP7中,为了简化这种类型的操作,出现了新的符号用法。
在PHP7中,引入了一个新的符号 "??" ,用来判断变量是否存在(注意:不是判断bool值)。例如:
$a=$b??"不存在";
等同于
$a=isset($b)?$b:"不存在";
他等于isset()的功能。来看个例子:
$a="123"; //有数据变量
$b=false; //Bool值变量
var_dump($a); //string(3) "123"
var_dump($b); //bool(false)
$c=$a??"未设置";
$d=$b??"未设置";
$e=$z??"未设置";
var_dump($c); //string(3) "123"
var_dump($d); //bool(false)
var_dump($e); //string(9) "未设置"
可以看到,不论是数值,还是布尔值,都会直接赋值,只有没有被设置过的变量才会被判断失败。
TIP:我们可以用"??"来进行变量检查。
这个就很好理解了,他和原本的三元运算符差异并不大,来个例子
$a="中国";
$value=$a?$a:"未定义";
$value2=$a?:"未定义";
echo '这里是'.$value; //输出:这里是中国
echo '这里是'.$value2; //输出:这里是中国
$a="";
$value=$a?$a:"未定义";
$value2=$a?:"未定义";
echo '这里是'.$value; //输出:这里是未定义
echo '这里是'.$value2; //输出:这里是未定义
$a=false;
$value=$a?$a:"未定义";
$value2=$a?:"未定义";
echo '这里是'.$value; //输出:这里是未定义
echo '这里是'.$value2; //输出:这里是未定义
所以
$value=$a?:"未定义";
等同于
$value=$a?$a:"未定义";
这里可以看出 "?;" 符号的意义就是替换以前的一种写法,用来直接判断指定变量的值是否正确,如果正确直接赋值,否则赋值指定内容。
再把我们常用的用户提交数据的简单去空判断应用一下就是这样:
$username=" ";
$value=trim($username)?:"用户名不能为空";
echo $value; //输出"用户名不能为空"
$username=" 张三 ";
$value=trim($username)?:"未设置";
echo $value; //输出"张三"
$username="李四";
$value=trim($username)?:"未设置";
echo $value; //输出"李四"
好了,这就是新符号 "??" 和 "?;" 的用法了。