成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 7 值得期待的新特性(上)

msup / 3192人閱讀

摘要:然而,兩個重要的已經(jīng)獲得通過,它們將帶來一些期望已久的內(nèi)部與用戶層的一致性。綜合比較運算符我個人最喜歡的新增特性是綜合比較運算符,,也稱為飛船操作符。實際上,該操作符的工作方式與,或基本一致。

這是我們期待已久的 PHP 7 系列文章的第一篇。

或許你已經(jīng)知道了,我在?PHP 5.0.0 時間軸?提的 RFC (Request For Comments)通過了, PHP 7 成為 PHP 下一個主要版本的名稱。

無論你對此話題有任何感想,PHP 7 是一個大事件,而且它將在今年發(fā)布!?PHP 7.0 時間軸?的 RFC 幾乎全票通過(32 對 2 )后,所有功能現(xiàn)在已經(jīng)確立了,我們將在六月中旬看到首個候選版本( RC )發(fā)布。

但這對你意味著什么呢?我們看到 5.x 新版本發(fā)布后,許多 Web 主機都不愿升級。一個重要的新版本發(fā)布難道不會帶來巨大的向后兼容隔斷,使得升級更加緩慢么?

答案是:視情況而定。請繼續(xù)往下讀。

在新版本中,許多語言邊界情況已經(jīng)得到處理。此外,性能與不一致性修復也是該版重點關(guān)注的問題。

接下來是細節(jié)討論。

不兼容性修復

不幸的是,needle/haystack 問題還未得到修復。然而,兩個重要的 RFC 已經(jīng)獲得通過,它們將帶來一些期望已久的內(nèi)部與用戶層的一致性。

最大的(也是最難以察覺的)變化是新增的一種?抽象語法樹( AST )——代碼在編譯過程中的中間表示。有了這種表示,我們可以清理一些邊緣情況的不一致,并為將來開發(fā)一些極好的工具做好準備,比如使用 AST 生成性能更好的 OpCode。

其次,統(tǒng)一變量語法?的引入,可能會導致更多問題。這解決了表達式求值中的許多不兼容問題。例如,可以使用 ($object->closureProperty)() 調(diào)用分配給屬性的閉包函數(shù) ,以及執(zhí)行鏈靜態(tài)調(diào)用,如下所示:

????class foo { static $bar = "baz"; }
????class baz { static $bat = "Hello World"; }

????baz::$bat = function () { echo "Hello World"; };

????$foo = "foo";
????($foo::$bar::$bat)();

然而,一些語法也在改變。特別是使用 variable->variables/properties 的語法。

在 PHP 7 之前,$obj->$properties["name"] 將訪問名稱屬于 “$properties” 數(shù)組名稱鍵(name key)的屬性。使用通用變量語法(Universal Variable Syntax)后,它將訪問名稱屬于 “$properties” 的屬性的名稱鍵。

或者更簡潔地說,如果使用以下語法:

????$obj->$properties["name"]

在 PHP 5.6,它將被解析為:

????$obj->{$properties["name"]}

而在 PHP 7 中則為:

????{$obj->$properties}["name"]

variable->variables 通常使用在邊界情況,根據(jù)我的經(jīng)驗, variable->properties??則更加常用,且不易用。然而,使用花括號(如上例所示)后,就可以輕易確保在 PHP 5.6 和 7 中達到相同效果。

性能

升級到 PHP 7 的最大原因是性能提升,此性能提升主要是由于引入?phpng?的變化帶來的。實際上,性能提升可能帶來更高的采納率,尤其是那些一般情況下不愿意升級的小主機,為了讓同一臺機器承載更多客戶,他們極有可能升級。

到目前為止,根據(jù)不同的基準測試,PHP 7 的性能與 Facebooks HHVM 持平,后者的特點是借助實時(Just In Time)編譯器將 PHP 代碼編譯至機器指令(只要可以)。

PHP 7 不具備 JIT ,雖然相關(guān)討論沸沸揚揚。添加 JIT 之后能帶來多少性能提升尚未可知,但若有人有興趣創(chuàng)建一個的話,肯定非常有趣!

除了性能提升,還應該節(jié)省大量的內(nèi)存,因為內(nèi)部數(shù)據(jù)結(jié)構(gòu)的優(yōu)化一直是性能改進實現(xiàn)的主要途徑。

向后不兼容的改變

雖然內(nèi)部開發(fā)人員盡力不去打破向后兼容性( BC ),但是想要推進語言的進步,沒法總是兼顧兼容性。

然而,像由于統(tǒng)一變量語法(Uniform Variable Syntax)導致打破的向后兼容性,這些不兼容多是輕微的,比如 在試圖調(diào)用一個非對象的方法時導致的可捕獲的致命錯誤:

????set_error_handler(function($code, $message) {
??????var_dump($code, $message);
????});

????$var = null;
????$var->method();
????echo $e->getMessage(); // Fatal Error: Call to a member function method() on null
????echo "Hello World"; // 依舊會運行

此外,ASP 與腳本標簽已被刪除,這意味著不可以再使用 <% 和 <%=,或

閱讀需要支付1元查看
<