序号 | 要点 | 改变 | 改写方案 |
---|---|---|---|
1 | 类、接口和 trait 的保留关键字 | bool、int、float、string、NULL、TRUE、FALSEphp |
如用到,更名处理 |
2 | 十六进制字符串mysql |
不在看成数字(数值型表示仍是支持的,只是字符串样式的不在自动转换) | 去掉两边的引号,或者两边的引号改小括号 |
3 | 包含 \u{ 字符串 | 因为新的 Unicode codepoint escape syntax语法,\u{会引发解析,好比"\u{aa}" 在php5输出会是原样,如今会输出对应的字符 | 双引号改单引号 |
4 | 以点号 ( . ) 结束的数值 | JSON 扩展已经被 JSOND 取代,这些都不在不支持 | 点号后加0或者去掉点号 |
5 | 用e前面有点号的科学计数法表示的数值 | ||
6 | 用空字符串表示的json串 | 用"[]"代替 | |
7 | $HTTP_RAW_POST_DATA | 移除 | 用 file_get_contents('php://input') |
8 | INI 文件中 # 注释格式(适用于 php.ini 以用 parse_ini_file() 和 parse_ini_string() 函数来处理的文件)sql |
移除 | 用分号( ; )取代 |
9 | 相似表达式 $$foo['bar']['baz'] 的变量 | 解析成 ${$foo['bar']['baz']} 变为 {$$foo}['bar']['baz'] | 用 ${$foo['bar']['baz']} |
10 | 相似表达式 $foo→$bar['baz'] 的变量 | 解析成 $foo→{$bar['baz']} 变为 {$foo→$bar}['baz'] | 用 $foo→{$bar['baz']} |
11 | 相似表达式 $foo→$bar['baz']() 的变量 | 解析成 $foo→{$bar['baz']}() 变为 ${foo→$bar}['baz']() | 用 $foo→{$bar['baz']}() |
12 | 相似表达式 Foo::$bar['baz']() 的变量 | 解析成 Foo::{$bar['baz']}() 变为 {Foo::$bar}['baz']() | 用 Foo::{$bar['baz']}() |
13 | 配置指令 xsl.security_prefs |
移除 | 用 XsltProcessor::setSecurityPrefs() |
14 | global声明变量的范围 | 只接受简单变量,相似 gloabl $$a 的用法不在支持; | 用 global ${$a} 的方法处理 |
15 | new 语句建立的对象以引用的方式赋值给变量 | 触发 Deprecated 改成抛出异常 | 去掉 new 前的 & |
16 | yieldjson |
变为右连运算符 | 用 (yield) |
17 | foreach 遍历数组 | 原数组移动指针当前位置变成不移动 | 用 next() 移动 |
18 | Switch 语句包含多个 default 块数组 |
触发异常错误 | 保留最后一个default,其他删除 |
19 | list 给无字符索引数组赋值 | 赋值顺序从右到左变为从左到右 | array_reverse() 处理一下 |
20 | 空的 list() 赋值session |
移除 | 直接赋空值或删除相关代码 |
21 | list 分解字符串 | 移除 | 用str_split() |
22 | 函数引用传参 | 非使用变量引用传参的会触发Notice | 先把值先赋给一个变量,在以此为参数调用函数 |
23 | 自定义的会话处理器(session handler)的使用的函数php7 |
发生错误时,报错由 error 变成 warningsocket |
加判断是否发生错误不可用,如发生错误,抛异常 |
24 | 构造函数出错 | 由返回null或不可用对象 变成 抛出异常 | try {} catch(ParseError $e){ return null; } 处理一下 |
25 | 函数定义中包含多个参数同名 | 触发异常错误 | 同一个函数中重名的参数更名 |
26 | 指定的处理函数收到的入参类型不必定是 Exception 对象oop |
指定的处理函数入参类型设置由Exception改成Throwable ,示例: function handler(Exception $e) { ... } 改成 function handler(Throwable $e) { ... } |
|
27 | dl() | 在 PHP-FPM 再也不可用 | 直接修改 php.ini 的设置加载相关模块吧? |
28 | mysql 扩展 | 移除 | 用 mysqli |
29 | mssql 扩展 | 移除 | 用 sqlsrv |
30 | ereg 扩展 |
移除 | 用 preg |
31 | call_user_method() |
移除 |
用 call_user_func() |
32 | call_user_method_array() |
用 call_user_func_array() | |
33 | mcrypt_generic_end() | 用 mcrypt_generic_deinit() | |
34 | mcrypt_ecb() | 加密用 mcrypt_encrypt ( 解密用: mcrypt_decrypt ( |
|
35 | mcrypt_cbc() | ||
36 | mcrypt_cfb() | ||
37 | mcrypt_ofb() | ||
38 | 已从GD扩展支持中移除 | 用TrueType 字体和相关的函数替代 | |
39 | |||
40 | |||
41 | imagepsfreefont() | ||
42 | imagepsloadfont() | ||
43 | imagepsslantfont() | ||
44 | imagepstext() | ||
45 | func_get_arg() | 不在用初值而是函数体内改变过的当前值 | 函数体内第一行调用,记录其值 |
46 | func_get_args() | ||
47 | debug_backtrace() | ||
48 | datefmt_set_timezone_id() | 移除 | 用 datefmt_set_timezone() |
49 | IntlDateFormatter::setTimeZoneID() | 移除 | 用 IntlDateFormatter::setTimeZone() |
50 | 移除 | 用stream_set_blocking() | |
51 | json_decode() | 处理的json串只支持包含小写的字面量 true,false 和 null | true,false 和 null若有大写的,改为小写 |
52 | php_logo_guid() | 移除 | |
53 | php_egg_logo_guid() | 移除 | |
54 | php_real_logo_guid() | 移除 | |
55 | zend_logo_guid() | 移除 | |
56 | split() | 移除 | 用preg_split() |
这些错误原来不会触发报错,如今会了,若是原来的项目中存在有相关的错误(隐患bug),那么如今会报出来:
数值溢出处理(如:浮点数转整数),处理方式由自动截断不报错变为触发E_WARNING 报错,返回null
含无效字符的八进制数值,原来静默删除无效字符变为触发解析错误
负位移运算,之前返回数值0,如今触发报运算错误;
set_magic_quotes_runtime() 相关常量在5.4就被移除了
解析错误会抛出 ParseError 异常,无需修改,原来直接error退出,如今可try catch了
经过引用赋值建立数组,数组的顺序改变
主要参考php手册
《php5.4x迁移到php5.5不兼容的变动》
http://php.net/manual/zh/migration55.incompatible.php
《php5.5x迁移到php5.6不兼容的变动》
http://php.net/manual/zh/migration56.incompatible.php
《php5.6x迁移到php7.0不兼容的变动》
http://php.net/manual/zh/migration70.incompatible.php
注:手册参考中《E_STRICT
警告级别变动》表部分中文“再也不警告,会引起错误”属于误译,原文“Notice removed, triggers no error”,意思是不在触发报错,实测也没有触发报错。