PHP7中我們應(yīng)該學(xué)習(xí)會(huì)用的新特性
PHP7于2015年11月正式發(fā)布,本次更新可謂是PHP的重要里程碑,它將帶來(lái)顯著的性能改進(jìn)和新特性,并對(duì)之前版本的一些特性進(jìn)行改進(jìn)。本文小編將和大家一起來(lái)了解探討PHP7中的新特性。
1. 標(biāo)量類(lèi)型聲明
我們知道PHP是一種弱類(lèi)型的編程語(yǔ)言,因此沒(méi)有提供任何方法來(lái)指定輸入?yún)?shù)和返回值的類(lèi)型,PHP7突破了這種現(xiàn)狀,增加了對(duì)標(biāo)量類(lèi)型(int,float,string,bool)的聲明支持,增加declare(strict_types=1)指令聲明是否嚴(yán)格類(lèi)型校驗(yàn),我們來(lái)看一段代碼:
(strict_types=) { $x + $y; } add(, );
有效的類(lèi)型有:class/interface name, self, array, callable, bool, float, int and string.
2. ?? ——NULL 合并運(yùn)算符
PHP7中添加了NULL合并運(yùn)算符,不要小看這個(gè)“??”,有了它我們就能很方便的獲取一個(gè)參數(shù),并能在其為空的情況下提供一個(gè)默認(rèn)值。如何??運(yùn)算符左側(cè)值存在并且不為NULL,則返回左側(cè),否則將返回其右側(cè)值。我們還是通過(guò)下面一段代碼來(lái)體驗(yàn)一下??運(yùn)算符的強(qiáng)大吧。
<?php // 獲取user參數(shù)的值(如果為空,則用'nobody') // PHP5中我們這樣來(lái)實(shí)現(xiàn): $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; // PHP7中,使用??運(yùn)算符更便捷: $username = $_GET['user'] ?? 'nobody'; ?>
3. 匿名類(lèi)
匿名類(lèi)顧名思義沒(méi)有類(lèi)名稱(chēng),其聲明和實(shí)例化是同時(shí)的,PHP7 支持通過(guò) new class 來(lái)實(shí)例化一個(gè)匿名類(lèi),可以用來(lái)替代一些”用后即焚”的完整類(lèi)定義。
echo ( { { ; } })->myMethod();
4. 更多 Error 錯(cuò)誤可以進(jìn)行異常處理
PHP7中更多的Error變?yōu)榭刹东@的Exception返回給開(kāi)發(fā)者,如果不進(jìn)行捕獲則為Error,如果捕獲就變?yōu)橐粋€(gè)可在程序內(nèi)處理的Exception。默認(rèn)情況下,Error會(huì)直接導(dǎo)致程序中斷,而PHP7則通過(guò)try / catch程序塊捕獲并且處理,讓程序繼續(xù)執(zhí)行下去,為程序員提供更靈活的選擇。
代碼示例:
nonExistFunction($arg);
這時(shí)上面的代碼會(huì)提示錯(cuò)誤“Fatal error: Call to a member function method() on a non-object ”,并且這個(gè)致命錯(cuò)誤會(huì)停止后面代碼的繼續(xù)執(zhí)行。
所以如果你想繼續(xù)執(zhí)行代碼,可以通過(guò)異常處理的方式解決:
{ nonExistFunction($arg); } (EngineException $e ) { ; }
5. 結(jié)合比較運(yùn)算符(<=> )
這個(gè)不多解釋?zhuān)覀冎苯涌词纠a,通過(guò)代碼你可以很容易了解該運(yùn)算符的作用。
{ ($a < $b) ? : (($a > $b) ? : ) } { $a <=> $b; }
6. 定義數(shù)組常量
過(guò)去我們?cè)谟胐efine()定義常量時(shí),數(shù)據(jù)類(lèi)型只支持標(biāo)量,但在PHP7中,支持定義數(shù)組類(lèi)型的常量。
define('MYCONSTANT', array('a','b','c'))
PHP7新增的特性還有很多,今天我們先介紹到這,后續(xù)會(huì)持續(xù)更新,同時(shí)也歡迎廣大PHPer補(bǔ)充,我們共同交流,共同學(xué)習(xí),共同進(jìn)步。