解析PHP 5.5 新特性_PHP教程

來源:互聯網
上載者:User
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例子:
複製代碼 代碼如下:
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了,但是這個數組的數組中的每個數組的個數需要一樣。看文檔的例子一看就明白了。
複製代碼 代碼如下:
$array = [
[1, 2],
[3, 4],
];

foreach ($array as list($a, $b)) {
echo "A: $a; B: $b\n";
}
?>

4 empty() 支援自訂函數了
之前empty()中的參數是不能為函數的。現在可以了
複製代碼 代碼如下:
function foo(){
return false;
}

if(empty(foo())){
echo 11;
} else {
echo 12;
}

5 非變數array和string也能支援下標擷取了
複製代碼 代碼如下:

echo array(1, 2, 3)[0];
echo [1, 2, 3][0];

echo "foobar"[2];

?>

6 類名通過::class可以擷取
複製代碼 代碼如下:
namespace Name\Space;
class ClassName {}

echo ClassName::class;

echo "\n";
?>

7 增加了opcache擴充
使用opcache會提高php的效能,你可以和其他擴充一樣靜態編譯(--enable-opcache)或者動態擴充(zend_extension)加入這個最佳化項。

http://www.bkjia.com/PHPjc/327953.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327953.htmlTechArticlePHP5.5 前不久前剛剛發布,裡面的新特性有什嗎?官方文檔在這裡: http://www.php.net/manual/zh/migration55.new-features.php 1 產生器 yield關鍵字 yield的中...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.