PHP7.0新增加的特性

1. ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用。用法: $a = $_GET['a'] ?? 1;它相當于:

1. ?? 運算符(NULL 合并運算符)

把這個放在第一個說是因為我覺得它很有用椰于。用法:

$a = $_GET['a'] ?? 1;

它相當于:


$a = isset($_GET['a']) ? $_GET['a'] : 1;

我們知道三元運算符是可以這樣用的:

$a ?: 1

但是這是建立在 $a 已經(jīng)定義了的前提上。新增的 ?? 運算符可以簡化判斷瓮栗。

2. 函數(shù)返回值類型聲明

官方文檔提供的例子(注意 ... 的邊長參數(shù)語法在 PHP 5.6 以上的版本中才有):


function arraysSum(array ...$arrays): array

{

return array_map(function(array $array): int {

return array_sum($array);

}, $arrays);

}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

從這個例子中可以看出現(xiàn)在函數(shù)(包括匿名函數(shù))都可以指定返回值的類型。

這種聲明的寫法有些類似于 Swift:

func sayHello(personName: String) -> String {

let greeting = "Hello, " + personName + "!"

return greeting

}

這個特性可以幫助我們避免一些 PHP 的隱式類型轉(zhuǎn)換帶來的問題瞄勾。在定義一個函數(shù)之前就想好預期的結(jié)果可以避免一些不必要的錯誤费奸。

不過這里也有一個特點需要注意。PHP 7 增加了一個 declare 指令:strict_types进陡,既使用嚴格模式愿阐。

使用返回值類型聲明時,如果沒有聲明為嚴格模式趾疚,如果返回值不是預期的類型缨历,PHP 還是會對其進行強制類型轉(zhuǎn)換。但是如果是嚴格模式糙麦, 則會出發(fā)一個 TypeError 的 Fatal error辛孵。

強制模式:


function foo($a) : int

{

return $a;

}

foo(1.0);

以上代碼可以正常執(zhí)行,foo 函數(shù)返回 int 1赡磅,沒有任何錯誤魄缚。

嚴格模式:


declare(strict_types=1);

function foo($a) : int

{

return $a;

}

foo(1.0);

# PHP Fatal error: Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6

在聲明之后,就會觸發(fā)致命錯誤焚廊。

是不是有點類似與 js 的 strict mode冶匹?

3. 標量類型聲明

PHP 7 中的函數(shù)的形參類型聲明可以是標量了。在 PHP 5 中只能是類名咆瘟、接口嚼隘、array 或者 callable (PHP 5.4,即可以是函數(shù)袒餐,包括匿名函數(shù))飞蛹,現(xiàn)在也可以使用 string、int灸眼、float和 bool 了卧檐。

官方示例:


// Coercive mode

function sumOfInts(int ...$ints)

{

return array_sum($ints);

}

var_dump(sumOfInts(2, '3', 4.1));

需要注意的是上文提到的嚴格模式的問題在這里同樣適用:強制模式(默認,既強制類型轉(zhuǎn)換)下還是會對不符合預期的參數(shù)進行強制類型轉(zhuǎn)換幢炸,嚴格模式下則觸發(fā) TypeError 的致命錯誤泄隔。

4. use 批量聲明

PHP 7 中 use 可以在一句話中聲明多個類或函數(shù)或 const 了:


use some\namespace\{ClassA, ClassB, ClassC as C};

use function some\namespace\{fn_a, fn_b, fn_c};

use const some\namespace\{ConstA, ConstB, ConstC};

但還是要寫出每個類或函數(shù)或 const 的名稱(并沒有像 Python 一樣的 from some import * 的方法)。

需要留意的問題是:如果你使用的是基于 composer 和 PSR-4 的框架宛徊,這種寫法是否能成功的加載類文件佛嬉?其實是可以的,composer 注冊的自動加載方法是在類被調(diào)用的時候根據(jù)類的命名空間去查找位置闸天,這種寫法對其沒有影響暖呕。

5. 其他的特性

其他的一些特性我就不一一介紹了,有興趣可以查看官方文檔:http://php.net/manual/en/migration70.new-features.php

簡要說幾個:

PHP 5.3 開始有了匿名函數(shù)苞氮,現(xiàn)在又有了匿名類了湾揽;

define 現(xiàn)在可以定義常量數(shù)組;

閉包( Closure)增加了一個 call 方法;

生成器(或者叫迭代器更合適)可以有一個最終返回值(return)库物,也可以通過 yield from 的新語法進入一個另外一個生成器中(生成器委托)霸旗。

生成器的兩個新特性(return 和 yield from)可以組合。具體的表象大家可以自行測試戚揭。PHP 7 現(xiàn)在已經(jīng)到 RC5 了诱告,最終的版本應(yīng)該會很快到來。

互聯(lián)網(wǎng)+時代民晒,時刻要保持學習精居,攜手千鋒PHP,Dream It Possible。

更多PHP相關(guān)技術(shù)請搜索千鋒PHP潜必,做真實的自己靴姿,用良心做教育。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磁滚,一起剝皮案震驚了整個濱河市佛吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恨旱,老刑警劉巖辈毯,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搜贤,居然都是意外死亡谆沃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門仪芒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唁影,“玉大人,你說我怎么就攤上這事掂名【萆颍” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵饺蔑,是天一觀的道長锌介。 經(jīng)常有香客問我,道長猾警,這世上最難降的妖魔是什么孔祸? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮发皿,結(jié)果婚禮上崔慧,老公的妹妹穿的比我還像新娘。我一直安慰自己穴墅,他們只是感情好惶室,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布温自。 她就那樣靜靜地躺著,像睡著了一般皇钞。 火紅的嫁衣襯著肌膚如雪悼泌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天鹅士,我揣著相機與錄音券躁,去河邊找鬼。 笑死掉盅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的以舒。 我是一名探鬼主播趾痘,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔓钟!你這毒婦竟也來了永票?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤滥沫,失蹤者是張志新(化名)和其女友劉穎侣集,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兰绣,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡世分,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀辩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臭埋。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖臀玄,靈堂內(nèi)的尸體忽然破棺而出瓢阴,到底是詐尸還是另有隱情,我是刑警寧澤健无,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布荣恐,位于F島的核電站,受9級特大地震影響累贤,放射性物質(zhì)發(fā)生泄漏叠穆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一畦浓、第九天 我趴在偏房一處隱蔽的房頂上張望痹束。 院中可真熱鬧,春花似錦讶请、人聲如沸祷嘶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽论巍。三九已至烛谊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘉汰,已是汗流浹背丹禀。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋怀,地道東北人双泪。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像密似,于是被迫代替她去往敵國和親焙矛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用残腌。用法: $a = $_GET[...
    斯文小螞蟻閱讀 84評論 0 0
  • 1. ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用村斟。用法: $a = $_GET[...
    eda4468f4688閱讀 84評論 0 0
  • 1. ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用。用法: $a = $_GET[...
    dagailv閱讀 165評論 0 0
  • 1. ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用抛猫。用法: $a = $_GET[...
    名真好取閱讀 228評論 0 0
  • ?? 運算符(NULL 合并運算符) 把這個放在第一個說是因為我覺得它很有用蟆盹。用法: $a = $_GET['a'...
    vardump閱讀 184評論 0 0