Yan.G WebServer Dev Engineer

php 7.4 用法随手记

2019-01-01
php

php ?? ?:

PHP7中增加了双问号“??”的语法,我们来讨论一下这个新语法怎么使用,先看下面这个简单的语句:

echo $a ?? -1;
// 这行语句是一个判断语句,判断变量$a是否存在,存在的话输出变量$a,否则输出-1。很显然由于变量$a没有被定义,所以输出的结果是“-1”。

echo $a ? 1 : -1;
// 上面这行代码是判断变量$a是否为空,如果为空的话输出“-1”,否则输出“1”。这行代码的输出结果也是“-1”,那么上面这两者有什么区别呢?
// “??”语句判断的是变量$a是否存在,“?:”语句判断的是变量$a是否为空,当然如果变量不存在的话,也是为空的。所以“?:”的结果包含了“??”的结果。

$a = 0;
echo $a ?? -1;
// -> 0
$a = 0;
echo $a ? 1 : -1;
-> 1

// 我们运行上面两个示例后可以发现,例子一的输出是“0”,因为变量$a已经被赋值了,是一个已经存在的变量,所以输出了变量$a本身的值“0”。例子二输出的是“-1”,因为值为“0”的变量依旧会被认为是空的,所以输出了“-1”。
  • 通过以上示例,我们发现双问号“??”判断的是是否存在,“?:”判断的是是否为空。

php 三元运算符

  • PHP7.4对三元运算符做了一些新的规定,以前我们在连续使用三元运算符时可以不加括号,如下代码: ```php a ? b : c ? d : e; // 上面这行代码7.4以前的版本,默认情况下会从左至右执行,先执行“1 ? 2 : 3”,然后再执行剩余的。

// PHP7.4已经弃用了默认的左关联执行,使用时必须加括号,如下:

(a ? b : c) ? d : e; // 或者 a ? b : (c ? d : e);

// 我们看到使用括号后,代码变得更清晰,更易理解。


* 如果还是使用原来没带括号的语法,那么会报如下错误:
```php
Unparenthesized `a ? b : c ? d : e` is deprecated. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)`
// 这个错误提示需要给三元运算加括号。

上一篇 laravel orm

Content