前言
全网无前任,有也不承认(有错误欢迎评论,交流)
一、7.0.x 改动
1、对于错误的处理
大家都知道 php对于错误的处理 没有java那么优秀,so从7.0开始,php增加了可以捕获Error类型了(仍然有限制,但是最起码在进步了)
;你能够捕获所有的Exception和Error,通过
try{
//出问题的代码
}catch(Throwable $e){ //只能在php7上使用
//出问题的解决办法代码
}
*Throwable 相当于捕获Exception和Error的集合(因为这两个都是实现Throwable接口的),如果你确定你要用的是php7,那么就catch Throwable就对了
2、全局异常注册函数 set_exception_handler() 不再保证收到的一定是 Exception 对象(说明在下面)
*假设你现在用的是php7,那么会有以下结论
// PHP 5 时代的代码将会出现问题(因为php7中也会抛出Error类型,但是你只捕获了Exception的类型,没有捕获Error的)
function handler(Exception $e) { ... }
set_exception_handler('handler');
// 兼容 PHP 5 和 7
function handler($e) { ... }
// 仅支持 PHP 7(推荐)
function handler(Throwable $e) { ... }
3、变量处理的变化(几个例子就懂啦)
※总结写在前面:php7开始,解析顺序变更为从左向右解析,不像php5那么乱了
(截图自官网)
4、 list() 不再以反向的顺序来进行赋值 (只会影响数组格式)
例子:::::::::::
list($a[], $a[], $a[]) = [1, 2, 3];
var_dump($a);
//in php5
array(3) {
[0]=>
int(3)
[1]=>
int(2)
[2]=>
int(1)
}
//in php7
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
※ list($a, $b, $c) = [1, 2, 3]; 这种格式的没有影响。 注意! 不要依赖list赋值顺序 未来可能也会变 !list() 还有一些其他修改,都是一些骚操作的封堵 ! 少写点骚写法,比什么都强
5、 foreach的变化 (只说可能有影响的部分)
当使用引用遍历数组时,现在 foreach 在迭代中能更好的跟踪变化.
例子:
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
//in php5
int(0)
//in php7 (发现了吧,循环需要注意,否则可能多循环几次,影响性能)
int(0)
int(1)
6、null合并运算符
$username = $_GET['user'] ?? 'nobody';
// 和下面的相等
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
7、太空船操作符(组合比较符)
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
8、通过 define() 定义常量数组(PHP5.6 中仅能通过 const 定义。 )
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // 输出 "cat"