您好,欢迎访问一九零五行业门户网

介绍php7和PHP5对比的新特性和性能优化

php7和php5对比的新特性和性能优化
1. 抽象语法树(ast)
ast在php编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些hack代码,同时,让实现更容易理解和可维护
推荐(免费):php7
2. natice tls:
线程数据共享安全,开启一个全局线程用作数据共享内存空间
3. 指定参数 返回值类型
4. zval 结构的变化
5. 异常处理
php 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的
 php 7引入 throwable 接口,错误及异常都实现了 throwable,无法直接实现 throwable,但可以扩展 \exception 和 \error 类。可以用 throwable 捕捉异常跟错误。\exception 是所有php及用户异常的基类;\error 是所有内部php错误的基类。
6. 新的参数解析方式
7. hashtable变化
buckets、zvals不再单独分配内存,消除了很多没用的冗余。
8、空合并操作符(null coalesce operator)
直接上例子:
$name = $name "noname"; // 如果$name有值就取其值,否则设$name成"noname"
9、飞船操作符(spaceship operator)(组合比较操作符)
形式:(expr) <=> (expr)
左边运算对象小,则返回-1;左、右两边运算对象相等,则返回0;左边运算对象大,则返回1。
$name = ["simen", "suzy", "cook", "stella"];usort($name, function ($left, $right) { return $left <=> $right;});print_r($name);
10、常量数组(constant array)
php 7 之前只允许类/接口中使用常量数组,现在 php 7 也支持非类/接口的普通常量数组了。
define("user", [ "name" => "simen", "sex" => "male", "age" => "38", "skill" => ["php", "mysql", "c"]]);// user["skill"][2] = "c/c++"; // php fatal error: cannot use temporary expression in write context in...
11、统一了变量语法
$goo = [ "bar" => [ "baz" => 100, "cug" => 900 ]];$foo = "goo";$$foo["bar"]["baz"]; // 实际为:($$foo)['bar']['baz']; php 5 中为:${$foo['bar']['baz']}; // php 7 中一个笼统的判定规则是,由左向右结合。
12、throwable 接口
这是 php 7 引进的一个值得期待的新特性,将极大增强 php 错误处理能力。php 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的。php 7引入 throwable 接口,错误及异常都实现了 throwable,无法直接实现 throwable,但可以扩展 \exception 和 \error 类。可以用 throwable 捕捉异常跟错误。\exception 是所有php及用户异常的基类;\error 是所有内部php错误的基类。
$name = "tony";try { $name = $name->method();} catch (\error $e) { echo "出错消息 --- ", $e->getmessage(), php_eol;}try { $name = $name->method();} catch (\throwable $e) { echo "出错消息 --- ", $e->getmessage(), php_eol;}try { intp(5, 0);} catch (\pisionbyzeroerror $e) { echo "出错消息 --- ", $e->getmessage(), php_eol;}
13、use 组合声明
use 组合声明可以减少 use 的输入冗余。
use phpgoodtaste\utils\{ util, form, form\validation, form\binding};
14、一次捕捉多种类型的异常 / 错误
php 7.1 新添加了捕获多种异常/错误类型的语法——通过竖杠“|”来实现。
try { throw new lengthexception("lengthexception"); // throw new pisionbyzeroerror("pisionbyzeroerror"); // throw new exception("exception");} catch (\pisionbyzeroerror | \lengthexception $e) { echo "出错消息 --- ", $e->getmessage(), php_eol;} catch (\exception $e) { echo "出错消息 --- ", $e->getmessage(), php_eol;} finally { // ...}
15、可见性修饰符的变化
php 7.1 之前的类常量是不允许添加可见性修饰符的,此时类常量可见性相当于 public。php 7.1 为类常量添加了可见性修饰符支持特性。总的来说,可见性修饰符使用范围如下所示:
函数/方法:public、private、protected、abstract、final类:abstract、final属性/变量:public、private、protected类常量:public、private、protectedclass yourclass { const the_old_style_const = "one"; public const the_public_const = "two"; private const the_private_const = "three"; protected const the_protected_const = "four";}
iterable 伪类型
php 7.1 引入了 iterable 伪类型。iterable 类型适用于数组、生成器以及实现了 traversable 的对象,它是 php 中保留类名。
$fn = function (iterable $it) : iterable { $result = []; foreach ($it as $value) { $result[] = $value + 1000; } return $result;};$fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
可空类型(nullable type)
php 7.1 引入了可空类型。看看新兴的 kotlin 编程语言的一个噱头特性就是可空类型。php 越来越像“强类型语言了”。对于同一类型的强制要求,可以设置其是否可空。
$fn = function (?int $in) { return $in "null";};$fn(null);$fn(5);$fn(); // typeerror: too few arguments to function {closure}(), 0 passed in ...
void 返回类型
php 7.1 引入了 void 返回类型。
function first(): void { // ...}function second(): void { // ... return;}
以上就是介绍php7和php5对比的新特性和性能优化的详细内容。
其它类似信息

推荐信息