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 擴展作了多方面的改進,包括:

相關文章
相關標籤/搜索