## 新特性 ### 太空船操作符 1. 用于比较两个表达式,当$a小于/等于/大于$b时,分别返回-1/0/1。比较原则沿用php常规比较规则。 2. ``` echo 1 <=> 1; //0 echo 1 <=> 2; //-1 echo 1 <=> 0; //1 ``` ### 标量类型声明和返回值的类型声明 1. 可对[string,int,float,bool]参数进行声明。默认模式下,传入参数不符合声明类型,会首先尝试转换类型;严格模式下直接报错。 2. ``` declare(strict_types = 1); //开启严格模式 function sum(int ...$ints) : int { return array_sum($ints); } var_dump(sum(2,4,4)); ``` 3. 函数返回值声明可以定义为void,则无论是否严格模式,只要函数中有其他`return;`以外的return语句都会报错。 ``` function sum(int ...$ints) : void { return; return array_sum($ints); /会报错 } var_dump(sum(2,4,4)); ``` 4. 在参数或返回值类型声明前加`?`表示返回值可以是null或者声明的类型 ### null合并操作符 1. 如果变量存在且值不为null,返回自身的值,否则返回第二个操作数. 2. `$page = $_GET['page'] ?? 0`; 3. 如果有连续的三元运算符还可以这样写`$page = $_GET['page'] ?? $_POST['page'] ?? 0` ### 常量数组 ``` define('ANIMALS', [ 'dog', 'cat', 'bird' ]); print_r(ANIMALS); ``` ### namespace批量导入 `use Space\{ClassA, ClassB, ClassC as C}` ### throwable接口 1. 实现了全局throwable接口,原来的Exception和部分Error实现了该接口。这种Error可以像Exception一样被第一个匹配的try/catch捕获,如果没有匹配的catch块,则调用异常处理函数处理。如未注册异常处理函数,则按照传统方式处理(fatal error) 2. ``` try { undefindfunc(); } catch (Error $e) { var_dump($e); } ``` 或者 ``` set_exception_handler(function($e) { var_dump($e); }); undefindfunc(); ``` ### Closure::call() 1. 暂时绑定一个闭包对象到$this对象并调用他 ``` class Test { private $num = 1; } $f = function() { return $this->num + 1; }; echo $f->call(new Test); //2 ``` ### intdiv整除函数 `var_dump(intdiv(10, 3));` ### list的方括号写法 ``` $arr = [1,2,3]; // list($a, $b, $c) = $arr; [$a, $b, $c] = $arr; var_dump($a, $b, $c); ```