新增的轉義字元,\u
,允許我們在php字串中直接加入unicode編碼字元:
使用語法如下\u
,例如綠色的心形 ��,可以直接用php字串表示:」\u」。
又乙個新的操作符,空值合併操作符,??
。返回左運算元如果其不為null,否則返回右運算元。
而且很重要的一點是,當左運算元未定義時,不會產生提示錯誤。此特性更像是isset()
函式,而不像?:
三元操作符。
你可以鏈式使用此操作符,它將返回第乙個非空值。
$config = $config ?? $this->config ?? static::$defaultconfig;
php 5.4版本時,提供了closure->bindto()
和closure::bind()
方法,用於改變閉包中$this的繫結物件和作用域,同時複製乙個新的閉包。
php 7現在加入了乙個更加簡單的方法closure->call()
,使其在呼叫時繫結$this和作用域。此方法將繫結的物件作為第乙個引數,其後的引數作為閉包引數傳入,如下:
<?php
class
helloworld
$closure = function
($whom)
$obj = new helloworld();
$closure->call($obj, 'world'); // hello world
如果你曾有從同乙個命名空間引入很多類,你可能會更高興你的開發工具自動幫你完成了這些工作。對於其他沒有使用自動完成工具的人來講,php 7現在提供了成組使用use申明的方法。它使得你能更快地更清晰引入同乙個命名空間下的多個類。
<?php
// 以前
useframework\component\subcomponent\classa;
useframework\component\subcomponent\classb
asclassc;
useframework\component\othercomponent\classd;
<?php
// 成組申明
useframework\component\;
它也可以與常量和函式的匯入混用。
<?php
useframework\component\;
生成器加入了兩個新的特性。第乙個就是生成器使用return語句,它允許生成器執行完畢後,返回乙個值。
在php 7之前,如果你嘗試返回任何東西,都會報錯。然而,現在你可以呼叫$generatro->getreturn()
來取得返回值了。
如果生成器還沒有返回,或者已經丟擲異常了,那麼執行$generator->getreturn()
也會丟擲異常。
如果沒有return語句的生成器執行完畢,則返回null值。
下面有個示例:
<?php
function
gen()
$gen = gen();
foreach ($gen
as$value)
// 第一次輸出 "hello",接著是" ", "world!"
echo
$gen->getreturn(); // goodbye moon!
第二個特性更加令人激動:生成器**。此特性允許你返回另乙個可以迭代的結構,並使其被遍歷——例如陣列,迭代器或者另乙個生成器。
子結構的迭代是由最外層的迴圈來完成的,單層次的迴圈而非以遞迴的方式。
當傳遞資料或異常給生成器時,就像直接呼叫子結構一樣,也是直接傳遞給子結構的。
**語法yield from \
<?php
function
hello
() function
goodbye
() $gen = hello();
foreach ($gen
as$value)
每一次迭代的輸出如下:
「hello」
」 「「world!」
「goodbye」
」 「「moon!」
有一點需要小心:因為子結構自身也可能被迭代產生值,所以完全有可能同乙個值被多個迭代所返回——如果這不是你想要的,則需要你自己去避免。
在之前的php中處理並捕獲致命錯誤幾乎是不可能的。但隨著新增加的引擎異常,許多這些錯誤將能夠轉化為異常丟擲。
現在,當乙個致命錯誤發生時,將丟擲異常,這樣你就可以優雅地處理它了。如果你不去處理它,則會產生傳統的不可捕獲的致命錯誤。
這些異常是\engineexception的例項,且與使用者空間的異常不同,它並沒有整合基礎的\exception類。這樣做是為了確保現有**中捕獲\exception的地方不會變得能夠捕獲到這些致命錯誤並繼續執行下去。這樣就保證了**向後相容。
以後,如果你想一起捕獲傳統的異常和引擎異常,那麼你需要使用到新增的、它們所共有的父類\baseexception。
另外,在eval()
函式使用時的解析錯誤會丟擲乙個\parseexception,同時型別不匹配會丟擲乙個\typeexception異常。
這兒有個例子:
<?php
try catch (\engineexception $e)
object(engineexception)#1 (7)
翻譯自:what to expect when you』re expecting: php 7, part 2
PHP 7 值得期待的新特性(下)
這是我們期待已久的 php 7 系列文章的第二篇。點此閱讀 第一篇本文系 oneapm 工程師編譯整理。也許你已經知道,重頭戲 php 7 的發布將在今年到來!現在,讓我們來了解一下,新版本有哪些新功能與改進。在本系列的 第一篇 我們介紹了 php 7 中最重要的一些不相容性修復以及兩大新特性。在本...
吊炸天的 PHP 7 ,你值得擁有
2015年的夏天,雖然來得不算火熱,但是在網際網路技術的夏天,比任何一年都更為火熱。剛剛才結束了 5 月底的網易 支付寶 攜程以及多家雲儲存廠商的接連故障的壞訊息,6月上旬則迎來了程式語言界兩大好訊息,第一件是 swift 2.0 發布以及開源,另一件是 php 7 alpha 版正式發布。這兩件大...
PHP7為什麼比PHP5快?
效能提公升的原因?1 儲存變數的結構體變小,盡量使結構體裡成員共用記憶體空間,減少引用,這樣記憶體占用降低,變數的操作速度得到提公升。2 字串結構體的改變,字串資訊和資料本身原來是分成兩個獨立記憶體塊存放,php7盡量將它們存入同一塊記憶體,提公升了cpu快取命中率。3 陣列結構的改變,陣列元素和h...