PHP5.5新特性

1 生成器 yield关键字

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

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

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,这样节省的时间和空间都会变小。git

 

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

 

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

2 finally关键字

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

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)加入这个优化项。性能

8  新的密码哈希 API

新的密码哈希 API that makes it easier to securely hash and manage passwords using the same underlying library ascrypt() in PHP has been added. See the documentation for password_hash() for more detail.优化

Apache 2.4 handler supported on Windows

The Apache 2.4 handler SAPI is now supported on Windows.

改进 GD

对 GD 扩展作了多方面的改进,包括:

相关文章
相关标签/搜索