我們知道php是一種弱型別的程式語言,因此沒有提供任何方法來指定輸入引數和返回值的型別,php7突破了這種現狀,增加了對標量型別(int,float,string,bool)的宣告支援,增加declare(strict_types=1)指令宣告是否嚴格型別校驗,我們來看一段**:
declare(strict_types=1
)function
add(
int$x,
int$y)
: int
echo add(1
,2);//int(7)
有效的型別有:class/inte***ce name、self、array,、callable、bool、float、int 和 string。
2. null合併運算子
php7中新增了null合併運算子,不要小看這個「??」,有了它我們就能很方便的獲取乙個引數,並能在其為空的情況下提供乙個預設值。如何??運算子左側值存在並且不為null,則返回左側,否則將返回其右側值。我們還是通過下面一段**來體驗一下??運算子的強大吧。
<?php// 獲取user引數的值(如果為空,則用'nobody')
// php5中我們這樣來實現:
$username
= isset
($_get
['user'])?
$_get
['user']:
'nobody'
;// php7中,使用??運算子更便捷:
$username
= $_get
['user']??
'nobody';?
?>
3.匿名類
顧名思義沒有類名稱,其宣告和例項化是同時的,php7 支援通過 new class 來例項化乙個匿名類,可以用來替代一些」用後即焚」的完整類定義。
echo(new
class
()})
->
mymethod
();//result: hello!
4. 更多error錯誤可以進行異常處理
php7中更多的error變為可捕獲的exception返回給開發者,如果不進行捕獲則為error,如果捕獲就變為乙個可在程式內處理的exception。預設情況下,error會直接導致程式中斷,而php7則通過try / catch程式塊捕獲並且處理,讓程式繼續執行下去,為程式設計師提供更靈活的選擇。
**示例:
nonexistfunction($arg
);// it will generate fatal error
這時上面的**會提示錯誤「fatal error: call to a member function method() on a non-object 」,並且這個致命錯誤會停止後面**的繼續執行。
所以如果你想繼續執行**,可以通過異常處理的方式解決:
trycatch
(engineexception$e
)n";}
5.結合比較運算子 <=>
這個不多解釋,我們直接看示例**,通過**你可以很容易了解該運算子的作用。
// php 7之前的寫法:比較兩個數的大小function
func($
a,$b
) // php新增的操作符 <=>
function
func($
a,$b
)
6.定義陣列常量
過去我們在用 define() 定義常量時,資料型別只支援標量,但在 php7 中,支援定義陣列型別的常量。
define('myconstant'
,array
('a'
,'b'
,'c'
));
php7的新特徵
1 函式的行參型別可以是標量,在 php 5 中只能是類名 介面 array 或者 callable php 5.4,即可以是函式,包括匿名函式 現在也可以使用 string int float和 bool 了。標量的模式有強制模式和嚴格模式兩種,模式宣告 declare strict types ...
php7的新特性
截止到目前為止,php官方已經發布了php7的rc5版本,預計在11月份左右會發布第乙個正式版本!現在來說php7的重大特性肯定已經是定型了,不會再有什麼變動了。後續一些版本的迭代主要也就是修修bug,優化之類的。下面就來說話我們一直期待的php7.0新特徵吧。1.標量引數型別宣告 現在支援字串 s...
PHP7的新特性
php7 從發布到現在已經有快三年的時間了,現在已經發展到 php7.2.9 版本了。它的發布給 php 帶來了很大的效能提公升,這主要是得益於 php 對 zend 引擎的深度優化,同時還降低了 php 對系統的資源占用。主要的變化有以下幾點 在php之前的版本中,php 在語法解析階段直接生成了...