国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

msup / 3184人閱讀

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

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

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

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

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

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

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

接下來是細節討論。

不兼容性修復

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

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

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

????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” 數組名稱鍵(name key)的屬性。使用通用變量語法(Universal Variable Syntax)后,它將訪問名稱屬于 “$properties” 的屬性的名稱鍵。

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

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

在 PHP 5.6,它將被解析為:

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

而在 PHP 7 中則為:

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

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

性能

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

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

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

除了性能提升,還應該節省大量的內存,因為內部數據結構的優化一直是性能改進實現的主要途徑。

向后不兼容的改變

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

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

????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元查看
<