一、php 5.2、5.3、5.4、5.5、5.6 版本区别对比以及新功能详解
php5.2 以前:autoload, pdo 和 mysqli, 类型约束php5.2:json 支持php5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,heredoc 和 nowdoc, const, 三元运算符,pharphp5.4:short open tag, 数组简写形式,traits, 内置 web 服务器,细节修改php5.5:yield, list() 用于 foreach, 细节修改php5.6: 常量增强,可变函数参数,命名空间增强
php5.3
php5.3算是一个非常大的更新,新增了大量新特征,同时也做了一些不向下兼容的修改:
1、匿名函数
$func=function($arg){ echo $arg;}$func('hello');
2、新增了魔术方法 __invoke(),__callstatic();
随着匿名函数的加入,php 引入了一个新的魔术方法 __invoke().该魔术方法会在将一个对象作为函数调用时被调用:class a{ public function __invoke($str) { print "a::__invoke(): {$str}"; }}$a = new a;$a("hello world");输出毫无疑问是: a::__invoke(): hello world__callstatic() 则会在调用一个不存在的静态方法时被调用。
3、命名空间
<?php// 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。// 命名空间中可以包含任意代码,但只有 **类, 函数, 常量** 受命名空间影响。namespace xxoo\test;// 该类的完整限定名是 \xxoo\test\a , 其中第一个反斜杠表示全局命名空间。class a{}// 你还可以在已经文件中定义第二个命名空间,接下来的代码将都位于 \other\test2 .namespace other\test2;// 实例化来自其他命名空间的对象:$a = new \xxoo\test\a;class b{}// 你还可以用花括号定义第三个命名空间namespace other { // 实例化来自子命名空间的对象: $b = new test2\b; // 导入来自其他命名空间的名称,并重命名, // 注意只能导入类,不能用于函数和常量。 use \xxoo\test\a as classa}
二、php7的新特性
./bin/php -v #查看php版本./bin/php -m #查看安装的模块
1、变量类型
function test(int $a,string $b,array $c):int{}
2、错误异常
try/catch
3、zval使用栈内存
节约了内存分配php5zval*val;make_std_zval(val);php7 zval val;
推荐教程:php7教程
以上就是php版本之间的区别的详细内容。