您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關PHP5.5新特性有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1 生成器 yield關鍵字
yield的中文文檔在這里:http://php.net/manual/zh/language.generators.overview.php
查看文檔,能知道yield的一個功能就是能有效的降低迭代的內存開銷。比如官網的這個xrange例子:
代碼如下:
<?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了,但是這個數組的數組中的每個數組的個數需要一樣。看文檔的例子一看就明白了。
復制代碼 代碼如下:
<?php
$array = [
[1, 2],
[3, 4],
];
foreach ($array as list($a, $b)) {
echo "A: $a; B: $b\n";
}
?>
4 empty() 支持自定義函數了
之前empty()中的參數是不能為函數的。現在可以了
復制代碼 代碼如下:
<?php
function foo(){
return false;
}
if(empty(foo())){
echo 11;
} else {
echo 12;
}
5 非變量array和string也能支持下標獲取了
復制代碼 代碼如下:
<?php
echo array(1, 2, 3)[0];
echo [1, 2, 3][0];
echo "foobar"[2];
?>
6 類名通過::class可以獲取
復制代碼 代碼如下:
<?php
namespace Name\Space;
class ClassName {}
echo ClassName::class;
echo "\n";
?>
7 增加了opcache擴展
使用opcache會提高php的性能,你可以和其他擴展一樣靜態編譯(--enable-opcache)或者動態擴展(zend_extension)加入這個優化項。
關于“PHP5.5新特性有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。