PHP7的新特性
太空船操作符 : <=>
太空船操作符用于比较两个表达式
例如,当\$a小于、等于或大于\$b时它分别返回-1、0或1
echo 1 <=> 1; //0
echo 1 <=>2; //-1
echo 2 <=>1; //1
类型声明
declare(strict_types=1);//strict_type=1表示开始严格模式
function sumOfInts(int ...$ints):int{
return array_sum($ints);
}
null合并操作符 : ??
\$page = isset($_GET['page']) ? $_GET['page'] : 0; 这种写法可以改成:
\$page = $_GET['page'] ?? 0;
常量数组
define('ANIMALS', ['dog', 'cat', 'bird']);
NameSpace批量导入
use Space\{Classs A, Classs B,Classs C}
throwable 接口
PHP 7 改变了大多数错误的报告方式。不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出。
这种 Error 异常可以像普通异常一样被 try / catch 块所捕获。如果没有匹配的 try / catch 块, 则调用异常处理函数(由 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
Error 类并不是从 Exception 类 扩展出来的,所以用 catch (Exception $e) { … } 这样的代码是捕获不 到 Error 的。你可以用 catch (Error $e) { … } 这样的代码,或者通过注册异常处理函数( set_exception_handler())来捕获 Error。
try{
undefinedfinc(); //调用未定义的方法
} catch(Error $e) {
var_dump($e);
}
# 5.6会直接报错:Fatal error: Call to undefined function undefinedfinc() in ...
# 7.x会捕获到错误信息并打印出来:
# object(Error)#1 (7) {
# ["message":protected]=>
# string(42) "Call to undefined function undefinedfinc()"
# ["string":"Error":private]=>
# string(0) ""
# ["code":protected]=>
# int(0)
# ["file":protected]=>
# string(15) "/root/throw.php"
# ["line":protected]=>
# int(3)
# ["trace":"Error":private]=>
# array(0) {
# }
# ["previous":"Error":private]=>
# NULL
# }
# php7还可以通过set_exception_handler 捕获异常,一样的效果:
set_exception_handler(function($e){
var_dump($e);
})
undefindfunc();
Closure::call()
将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
calss Test{
private $num = 1;
}
$fun = function(){
return $this->num + 1;
}
echo $fun->call(new Test); // 2
intdiv 函数
返回值为第一个参数除于第二个参数的值并取整。
intdiv(10, 3); //3
list 的方括号写法
$arr = [1,2,3];
[$a,$b,$c] = $arr; // $a = 1, $b = 2, $c = 3