PHP 5.5 新特性

简介:

PHP5.5 前不久前刚刚发布,里面的新特性有什么?官方文档在这里:

http://www.php.net/manual/zh/migration55.new-features.php

1 生成器 yield关键字

yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php

查看文档,能知道yield的一个功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function  xrange( $start , $limit , $step  = 1) {
     for  ( $i  = $start ; $i  <= $limit ; $i  += $step ) {
         yield  $i ;
     }
}
 
echo  'Single digit odd numbers: ' ;
 
/*
  * Note that an array is never created or returned,
  * which saves memory.
  */
foreach  (xrange(1, 9, 2) as  $number ) {
     echo  "$number " ;
}
 
echo  "\n" ;
?>

这里的xrange是一个迭代,功能和range是一样的,如果使用range函数的话,那么函数内部实现会储存每个迭代的中间过程,即每个中间变量都有个内存空间,那么首先程序使用的内存空间就大了,而且分配内存,回收内存都会导致程序的运行时间加长。但是如果使用上yield实现的xrange函数的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。

 

那么为什么yield会有这样的效果呢?联想到lua中的yield,这里就算是协程的概念了。在lua语言中,当程序运行到yield的时候,使用协程将上下文环境记录住,然后将程序操作权归还到主函数,当主函数调用resume的时候,会重新唤起协程,读取yield记录的上下文。这样形成了程序语言级别的多协程操作。php 5.5这里的yield也是同样的道理,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,只是php中没有使用如resume一样的关键字,而是“在使用的时候唤起”协程。比如上例中的foreach迭代器就能唤起yield。所以上面的这个例子就能理解了。

 

其实照着引用yield来说,好多内部函数,特别是迭代有关的函数应该都有可能进行优化。或许后续会有yield版本和非yield版本的实现同一功能的函数把。

2 finally关键字

这个和java中的finally一样,经典的try ... catch ... finally 三段式异常处理。

3 foreach 支持list()

对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。

1
2
3
4
5
6
7
8
9
10
<?php
$array  = [
     [1, 2],
     [3, 4],
];
 
foreach  ( $array  as  list( $a , $b )) {
     echo  "A: $a; B: $b\n" ;
}
?>

4 empty() 支持自定义函数了

之前empty()中的参数是不能为函数的。现在可以了

1
2
3
4
5
6
7
8
9
10
<?php
function  foo(){
     return  false;
}
 
if ( empty (foo())){
     echo  11;
} else  {
     echo  12;
}

5 非变量array和string也能支持下标获取了

1
2
3
4
5
6
7
8
<?php
  
echo  array (1, 2, 3)[0];
echo  [1, 2, 3][0];
  
echo  "foobar" [2];
  
?>

6 类名通过::class可以获取

1
2
3
4
5
6
7
8
<?php
namespace  Name\Space;
class  ClassName {}
 
echo  ClassName:: class ;
 
echo  "\n" ;
?>

7 增加了opcache扩展

使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。

目录
相关文章
|
3月前
|
安全 编译器 测试技术
PHP 8新特性探索
随着PHP 8的发布,这个广泛使用的编程语言带来了一系列令人兴奋的新特性和性能改进。本文将深入探讨PHP 8中的一些关键更新,包括JIT编译器、联合类型、匹配表达式以及命名参数等,并分析这些变化如何影响开发者构建更快、更安全的应用。
|
4月前
|
缓存 编译器 测试技术
PHP 8新特性解析与应用
在软件开发的广阔天地中,PHP始终是一颗耀眼的星辰。随着PHP 8的发布,一系列激动人心的新特性为开发者带来了前所未有的编程体验。本文将深入探讨PHP 8中的JIT编译器、联合类型、命名参数、匹配表达式等关键特性,并通过实例分析它们如何优化代码结构、提升执行效率。我们将一起见证PHP 8如何开启现代化PHP开发的新篇章,并为读者提供实用的技术参考。
38 2
|
5月前
|
设计模式 安全 测试技术
深入理解PHP 7的新特性及其对现代开发的意义
【6月更文挑战第20天】在数字时代的浪潮中,PHP作为一门流行的服务端脚本语言,其最新主要版本PHP 7带来了显著的性能提升和语法改进。本文将探讨PHP 7的关键新特性,包括性能优化、类型声明、匿名类以及错误处理机制的变革,并分析这些变化如何影响现代Web开发实践,为开发者提供更高效、更安全的编码体验。
|
3月前
|
PHP UED
探索PHP 7中的新特性
【8月更文挑战第1天】本文将介绍PHP 7中引入的一些关键新特性,包括性能提升、类型声明和空合并运算符等。我们将通过代码示例来展示这些特性如何简化代码并提高其可读性。文章的结尾将提出一个开放性问题,引导读者思考如何使用这些特性来优化自己的PHP项目。
33 6
|
3月前
|
设计模式 安全 PHP
深入理解PHP 7中的新特性
【8月更文挑战第28天】本文将带你领略PHP 7带来的革命性变化,探索其性能提升的秘诀和语法糖的甜蜜。通过直观的例子,我们将一探究竟,看看这些新特性如何让你的代码更简洁、高效。准备好,我们即将启程!
|
4月前
|
安全 编译器 PHP
PHP 8.0 新特性探索与应用
PHP语言自发布以来经历了多个版本的迭代与更新,PHP 8.0作为其最新版本,引入了许多令人兴奋的新特性与改进,这些变化不仅提升了语言的性能和安全性,还为开发者带来了更多便利和灵活性。本文将深入探讨PHP 8.0的主要新特性,并探讨如何在实际项目中应用这些特性,以便开发者能够充分利用PHP 8.0的潜力。【7月更文挑战第2天】
48 1
|
5月前
|
编译器 PHP 开发者
深入理解PHP 7的新特性
【6月更文挑战第23天】随着PHP 7的发布,这个广泛使用的服务器端脚本语言带来了许多令人兴奋的性能改进和新特性。本文将深入探讨PHP 7中的一些关键变化,包括性能提升、类型声明、太空船操作符和匿名类等。我们将了解这些新特性如何优化代码,提高开发效率,并使PHP更加现代化。无论你是PHP新手还是有经验的开发者,这篇文章都将帮助你更好地理解和利用PHP 7的强大功能。
|
5月前
|
编译器 PHP 开发者
深入理解PHP 8的新特性
【6月更文挑战第25天】本文将深入探讨PHP 8的新增特性,包括JIT编译器、联合类型、名称参数、匹配表达式、错误处理等。我们将通过实际代码示例来展示这些新特性如何改变PHP开发的现状,并讨论它们对性能和代码可读性的影响。无论你是PHP新手还是资深开发者,这篇文章都将为你提供有价值的信息。
|
安全 PHP
PHP8新特性解读(1)
PHP8新特性解读
407 0
PHP8新特性解读(1)
|
安全 Go PHP
PHP8新特性解读(2)
PHP8新特性解读
250 0
PHP8新特性解读(2)