PHP7 和 PHP5差异

php php 793      收藏
PHP7 和 PHP5差异

PHP7 优势
1、新增操作符

<=> 比较
语法:$c = $a <=> $b

如果$a > $b, $c 的值为1

如果$a == $b, $c 的值为0

如果$a < $b, $c 的值为-1

??
//原写法
$username = isset($_GET['user]) ? $_GET['user] : 'nobody';
//现在
$username = $_GET['user'] ?? 'nobody';

2、define() 定义常量数组
define('ARR',['a','b']);
echo ARR[1];// a


3、AST在PHP编译过程作为一个中间件的角色, 替换原来直接从解释器吐出opcode的方式, 让解释器(parser)和编译器(compliler)解耦, 可以减少一些Hack代码, 同时, 让实现更容易理解和可维护.

PHP5 : PHP代码 -> Parser语法解析 -> OPCODE -> 执行 
PHP7 : PHP代码 -> Parser语法解析 -> AST -> OPCODE -> 执行

4、匿名函数
$anonymous_func = function(){return 'function';};
echo $anonymous_func(); // 输出function

5、Unicode字符格式支持(echo "\u{9999}");

6、Unserialize 提供过滤特性

7、命名空间引用优化

// PHP7以前语法的写法 
use FooLibrary\Bar\Baz\ClassA; 
use FooLibrary\Bar\Baz\ClassB; 
// PHP7新语法写法 
use FooLibrary\Bar\Baz\{ ClassA, ClassB};

PHP7 废弃

1、废弃扩展
Ereg 正则表达式 
mssql 
mysql 
sybase_ct


2、废弃的特性
不能使用同名的构造函数 
实例方法不能用静态方法的方式调用

3、废弃的函数
call_user_method() 
call_user_method_array()

换成
call_user_func()
call_user_func_array()

加密函数
mcrypt_generic_end()
mcrypt_ecb()
mcrypt_cbc()
mcrypt_cfb()
mcrypt_ofb()

PHP7.1 以后mcrypt_*序列函数都将被移除。推荐使用:openssl 序列函数

4、废弃的用法
$HTTP_RAW_POST_DATA 变量被移除, 使用php://input来代
ini文件里面不再支持#开头的注释, 使用”;”
移除了ASP格式的支持和脚本语法的支持: <% 和 < script language=php >


PHP7 带来的变更
1、字符串处理机制修改

2、整型处理机制修改
(Int64支持, 统一不同平台下的整型长度, 字符串和文件上传都支持大于2GB. 64位PHP7字符串长度可以超过2^31次方字节.)

3、参数处理机制修改

4、foreach修改
$arr = [1,2,3];
foreach ($arr as &$val) {
    echo current($arr);// php7 全返回0
}

5、list修改
不再支持字符串拆分功能
空的list()赋值不再允许

6、变量处理机制修改
对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。

引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了