PHP 7 的新特徵

2021-07-25 15:54:59 字數 2192 閱讀 5443

我們知道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 」,並且這個致命錯誤會停止後面**的繼續執行。

所以如果你想繼續執行**,可以通過異常處理的方式解決:

try

catch

(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 在語法解析階段直接生成了...