摘要:在本系列的第一篇我們介紹了中最重要的一些不兼容性修復(fù)以及兩大新特性。例如這個綠色的心形,,可以表示為字符串。雖然現(xiàn)在它只具備內(nèi)部測試品質(zhì)目前已可以下載,但的確讓人期待。向項目報告錯誤,并定期重試。
這是我們期待已久的 PHP 7 系列文章的第二篇。點(diǎn)此閱讀 第一篇本文系 OneAPM 工程師編譯整理。
也許你已經(jīng)知道,重頭戲 PHP 7 的發(fā)布將在今年到來!現(xiàn)在,讓我們來了解一下,新版本有哪些新功能與改進(jìn)。
在本系列的 第一篇 ,我們介紹了 PHP 7 中最重要的一些不兼容性修復(fù)以及兩大新特性。在本文中,我們將了解 PHP 7 的另外六大功能。
Unicode 代碼點(diǎn)轉(zhuǎn)義語法新增加的轉(zhuǎn)義字符—— u,允許我們在 PHP 字符串內(nèi)明確指定 Unicode 字符代碼點(diǎn)(以十六進(jìn)制):
此處使用的語法為 u{CODEPOINT} 。例如這個綠色的心形,?, 可以表示為 PHP 字符串 __"u{1F49A}"__。
Null 合并操作符另一個新的操作符—— Null 合并操作符 ?? ,其實(shí)是傳說中的三目運(yùn)算符 。如果它不是 Null ,將返回左操作數(shù),否則返回右操作數(shù)。
重點(diǎn)在于,如果左操作數(shù)是一個不存在的變量,也不會引起注意。這就像 isset() ,而不像 ?: 短三目運(yùn)算符。
你還可以鏈接該操作符,從而返回給定集合的第一個非 null 值。
$config = $config ?? $this->config ?? static::$defaultConfig;調(diào)用之上綁定閉包
之前,在 PHP 5.4 添加的 Closure->bindTo() 與 Closure::bind() 允許你改變 $this 和調(diào)用范圍的綁定,同時或多帶帶地,創(chuàng)建一個重復(fù)閉包。
現(xiàn)在,PHP 7 增加了在調(diào)用時達(dá)到上述功能的簡便方法,通過 Closure->call() 將 $this 和調(diào)用范圍綁定至同一對象 。該方法將對象作為首個參數(shù),然后是傳到閉包中的其他參數(shù),如下:
class HelloWorld { private $greeting = "Hello"; } $closure = function($whom) { echo $this->greeting . " " . $whom; } $obj = new HelloWorld(); $closure->call($obj, "World"); // Hello World組使用聲明
如果你曾經(jīng)從同一命名空間導(dǎo)入多個類,而你的 IDE 能自動完成,你肯定會很高興。對于其他人,為了簡便起見,PHP 7 現(xiàn)在有了 組使用聲明。這讓你快速清楚地指定多次相似的 導(dǎo)入:
// Original use FrameworkComponentSubComponentClassA; use FrameworkComponentSubComponentClassB as ClassC; use FrameworkComponentOtherComponentClassD; // With Group Use use FrameworkComponent{ SubComponentClassA, SubComponentClassB as ClassC, OtherComponentClassD };
你也可以在常量導(dǎo)入與函數(shù)導(dǎo)入時與 use function、use const 一起使用它。同時也支持混合導(dǎo)入。
use FrameworkComponent{ SubComponentClassA, function OtherComponentsomeFunction, const OtherComponentSOME_CONSTANT };生成器改進(jìn)
生成器有兩大新功能。首先是 生成器返回表達(dá)式,它允許你在生成器(成功)完成時返回一個值。
PHP 7 之前,如果你嘗試返回任何值將導(dǎo)致錯誤。然而,現(xiàn)在你可以調(diào)用 $generator->getReturn() 來獲取返回值。
如果生成器尚未返回,或拋出未捕獲的異常,調(diào)用 $generator->getReturn() 將拋出一個異常。
如果生成器已完成,但沒有返回,則返回空。
舉例如下:
function gen() { yield "Hello"; yield " "; yield "World!"; return "Goodbye Moon!"; } $gen = gen(); foreach ($gen as $value) { echo $value; } // Outputs "Hello" on iteration 1, " " on iterator 2, and "World!" on iteration 3 echo $gen->getReturn(); // Goodbye Moon!
第二個功能則更令人興奮:生成器委托。這允許你返回另一個可迭代結(jié)構(gòu),它可以迭代自身——不論是數(shù)組,迭代器,還是另一個生成器。
重要的是,子結(jié)構(gòu)的迭代是由最外層的原始循環(huán)完成的,如同單一的平面結(jié)構(gòu),而非遞歸結(jié)構(gòu)。
當(dāng)向生成器發(fā)送數(shù)據(jù)或異常時也同理。這些數(shù)據(jù)或異常會直接傳到子結(jié)構(gòu)中,就像被調(diào)用直接控制。
這是使用了
function hello() { yield "Hello"; yield " "; yield "World!"; yield from goodbye(); } function goodbye() { yield "Goodbye"; yield " "; yield "Moon!"; } $gen = hello(); foreach ($gen as $value) { echo $value; }
在每次迭代中,將輸出:
"Hello"
" "
"World!"
"Goodbye"
" "
"Moon!"
值得一提的一點(diǎn)警告是,由于子結(jié)構(gòu)可以產(chǎn)生自己的鍵,多次迭代完全可能返回相同的鍵——如果這對你很重要,你需要自己想辦法避免。
內(nèi)部異常在 PHP 中,致命和可捕獲的致命錯誤一直無法處理,或者很難處理 。但有了內(nèi)部異常 以后,許多這類錯誤現(xiàn)在都可以拋出異常了。
現(xiàn)在,當(dāng)一個致命或可捕獲的致命錯誤發(fā)生時,會拋出一個異常,允許你從容地處理它。如果你不進(jìn)行處理,它將成為未捕獲的異常這類傳統(tǒng)的致命錯誤。
這些異常是 EngineException 對象。它們不像所有的用戶異常,并不繼承自 Exception 類。這是為了確?,F(xiàn)在捕獲 Exception 類的代碼今后不會開始捕獲致命錯誤。從而保持向后兼容性。
在將來,如果你想同時捕獲傳統(tǒng)異常和內(nèi)部異常,你需要捕獲他們新的共享父類,BaseException。
此外, eval()’ed 代碼中的解析錯誤會拋出 ParseException,而類型不匹配將拋出一個 TypeException。
如下例:
try { nonExistentFunction(); } catch (EngineException $e) { var_dump($e); } object(EngineException)#1 (7) { ["message":protected]=> string(32) "Call to undefined function nonExistantFunction()" ["string":"BaseException":private]=> string(0) "" ["code":protected]=> int(1) ["file":protected]=> string(17) "engine-exceptions.php" ["line":protected]=> int(1) ["trace":"BaseException":private]=> array(0) { } ["previous":"BaseException":private]=> NULL }
OneAPM for PHP 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包括代碼級別性能問題的可見性、性能瓶頸的快速識別與追溯、真實(shí)用戶體驗監(jiān)控、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理。
即將到來!距離 PHP 7.0.0 發(fā)布只有八個月了(譯者翻譯時所剩時日不多),該版本很可能是 PHP 歷史上性能最快的一版。雖然現(xiàn)在它只具備內(nèi)部測試品質(zhì)(目前 RC5 已可以下載) ,但 PHP 7 的確讓人期待。
并且,你能幫助它變得更好。
測試你的代碼使用 Rasmus’s 的 PHP 7 vagrant 沙盒,開始運(yùn)行你的測試套件,或執(zhí)行常規(guī)的質(zhì)量檢驗。向項目報告錯誤,并定期重試。
幫助 GOPHP7-EXT使用 PHP 7 的一大障礙是確保更新所有擴(kuò)展使之與新的 Zend Engine 3 兼容。
如果你使用的擴(kuò)展較為小眾,沒有得到其維護(hù)者足夠的關(guān)注——或者你使用自己的擴(kuò)展——請查看 GoPHP7-ext 項目從而確保 PHP 7 發(fā)布后一切都準(zhǔn)備妥當(dāng)。
書寫文檔PHP 7 中的每個新功能都有一個 RFC 。你可以在 PHP.net 維基 找到他們,并在此基礎(chǔ)上寫新文檔。你可以在 在線GUI 環(huán)境下 寫,包括提交(如果你有 karma)或提交補(bǔ)丁以供審核。
總結(jié)PHP 7 將是偉大的!
PHP是全世界最好的語言,沒有之一 :)
抓緊測試你的應(yīng)用程序。幫助遷移擴(kuò)展。
P.S. 你已經(jīng)在使用 PHP 7 了么?你對新功能有何感受?是否有你不滿意,或者不喜歡的地方?你認(rèn)為你會何時升級?讓我們知道你的想法!
分享你的想法,盡在 APM俱樂部!
OneAPM for PHP 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包括代碼級別性能問題的可見性、性能瓶頸的快速識別與追溯、真實(shí)用戶體驗監(jiān)控、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21226.html
摘要:然而,兩個重要的已經(jīng)獲得通過,它們將帶來一些期望已久的內(nèi)部與用戶層的一致性。綜合比較運(yùn)算符我個人最喜歡的新增特性是綜合比較運(yùn)算符,,也稱為飛船操作符。實(shí)際上,該操作符的工作方式與,或基本一致。 這是我們期待已久的 PHP 7 系列文章的第一篇。 或許你已經(jīng)知道了,我在?PHP 5.0.0 時間軸?提的 RFC (Request For Comments)通過了, PHP 7 成為 PH...
摘要:在理想的情況下,我們甚至可以立即將應(yīng)用程序升級到。于是,在中,我們可以得到些什么正如我們所看到的,的新增特性除之外并不是很亮眼,盡管這些特性非常好用,但對于大多數(shù)應(yīng)用程序來說并不重要。 轉(zhuǎn)載請注明出處:葡萄城官網(wǎng),葡萄城為開發(fā)者提供專業(yè)的開發(fā)工具、解決方案和服務(wù),賦能開發(fā)者。 本文由葡萄城翻譯并發(fā)布 showImg(https://segmentfault.com/img/bVbrk...
摘要:的新特性說了這么多,看都會有哪些特性來改變我們寫代碼的方式呢局部變量類型推斷局部變量類型推斷可以說是中最值得注意的特性,這是語言開發(fā)人員為了簡化應(yīng)用程序的編寫而采取的又一步,如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才發(fā)布幾個月,很多玩意都沒整明白,現(xiàn)在Java 10又快要來了...
摘要:物聯(lián)網(wǎng)已經(jīng)成為現(xiàn)實(shí)只要去年單獨(dú)參加過會議或者搜索過專門的技術(shù)網(wǎng)站,你現(xiàn)在會越來越清楚地注意到物物互聯(lián)正在蓬勃發(fā)展。有大量的討論在口頭上承認(rèn)了物聯(lián)網(wǎng),年這方面的激烈討論只會更多。兩年過去了,期待已久的更新應(yīng)該在月日發(fā)布。 導(dǎo)讀 如果你還在為Oracle收購Sun公司給Java社區(qū)的變化所糾結(jié),請站在Oracle的角度替它想想吧。2013年大部分時間里,Oracle都在與遺留的Java安...
閱讀 546·2023-04-26 01:39
閱讀 4537·2021-11-16 11:45
閱讀 2624·2021-09-27 13:37
閱讀 902·2021-09-01 10:50
閱讀 3619·2021-08-16 10:50
閱讀 2234·2019-08-30 15:55
閱讀 2997·2019-08-30 15:55
閱讀 2269·2019-08-30 14:07