国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

解析PHP 5.5 新特性

2020-03-22 18:03:31
字體:
供稿:網(wǎng)友
PHP5.5 前不久前剛剛發(fā)布,里面的新特性有什么?官方文檔在這里:
http://www.php.net/manual/zh/migration55.new-features.php
1 生成器 yield關(guān)鍵字
yield的中文文檔在這里:http://php.net/manual/zh/language.generators.overview.php
查看文檔,能知道yield的一個功能就是能有效的降低迭代的內(nèi)存開銷。比如網(wǎng)址的這個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函數(shù)的話,那么函數(shù)內(nèi)部實現(xiàn)會儲存每個迭代的中間過程,即每個中間變量都有個內(nèi)存空間,那么首先程序使用的內(nèi)存空間就大了,而且分配內(nèi)存,回收內(nèi)存都會導致程序的運行時間加長。但是如果使用上yield實現(xiàn)的xrange函數(shù)的話,里面所有的中間變量都只使用一個內(nèi)存$i,這樣節(jié)省的時間和空間都會變小。

那么為什么yield會有這樣的效果呢?聯(lián)想到lua中的yield,這里就算是協(xié)程的概念了。在lua語言中,當程序運行到y(tǒng)ield的時候,使用協(xié)程將上下文環(huán)境記錄住,然后將程序操作權(quán)歸還到主函數(shù),當主函數(shù)調(diào)用resume的時候,會重新喚起協(xié)程,讀取yield記錄的上下文。這樣形成了程序語言級別的多協(xié)程操作。php 5.5這里的yield也是同樣的道理,當程序運行到y(tǒng)ield的時候,當前程序就喚起協(xié)程記錄上下文,然后主函數(shù)繼續(xù)操作,只是php中沒有使用如resume一樣的關(guān)鍵字,而是“在使用的時候喚起”協(xié)程。比如上例中的foreach迭代器就能喚起yield。所以上面的這個例子就能理解了。

其實照著引用yield來說,好多內(nèi)部函數(shù),特別是迭代有關(guān)的函數(shù)應該都有可能進行優(yōu)化。或許后續(xù)會有yield版本和非yield版本的實現(xiàn)同一功能的函數(shù)把。

2 finally關(guān)鍵字
這個和java中的finally一樣,經(jīng)典的try ... catch ... finally 三段式異常處理。

3 foreach 支持list()
對于“數(shù)組的數(shù)組”進行迭代,之前需要使用兩個foreach,現(xiàn)在只需要使用foreach + list了,但是這個數(shù)組的數(shù)組中的每個數(shù)組的個數(shù)需要一樣。看文檔的例子一看就明白了。
復制代碼 代碼如下:
?php
$array = [
[1, 2],
[3, 4],
];

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

4 empty() 支持自定義函數(shù)了
之前empty()中的參數(shù)是不能為函數(shù)的。現(xiàn)在可以了
復制代碼 代碼如下:
?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 類名通過::html' target='_blank'>class可以獲取
復制代碼 代碼如下:
?php
namespace Name/Space;
class ClassName {}

echo ClassName::class;

echo "/n";
?

7 增加了opcache擴展
使用opcache會提高php的性能,你可以和其他擴展一樣靜態(tài)編譯(--enable-opcache)或者動態(tài)擴展(zend_extension)加入這個優(yōu)化項。
PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊宁县| 共和县| 凤台县| 专栏| 土默特左旗| 齐河县| 山阴县| 任丘市| 印江| 潍坊市| 秦皇岛市| 建湖县| 永胜县| 铁岭市| 日喀则市| 长海县| 安达市| 如东县| 景泰县| 青阳县| 宁国市| 民勤县| 界首市| 沧州市| 郁南县| 鹿泉市| 华蓥市| 山东省| 吴桥县| 中西区| 泸定县| 河北区| 临颍县| 龙州县| 玉门市| 周至县| 团风县| 南和县| 阿瓦提县| 丰顺县| 澜沧|