當前位置:學者齋 >

計算機 >php語言 >

PHP7.1中有哪些重大的更新

PHP7.1中有哪些重大的更新

PHP 7.1.0 帶來了大量的改進和新功能,PHP7.1中有哪些重大的更新呢? 就跟隨本站小編一起去了解下吧,想了解更多相關資訊請持續關注我們應屆畢業生考試網!

PHP7.1中有哪些重大的更新

可空型別 返回空型別 可迭代的psuedo-type 支援常量可見的類 陣列解構 square 框架和在 list()中允許指定 keys 多異常型別捕獲

可空型別

PHP 7添加了引數型別宣告和函式返回值型別宣告,函式引數或者返回值的型別要麼為指定型別要麼為null。舉例如下:

function sum(int $a, int $b): ?int{

return $a + $b;

}

上述函式可以返回一個整數或一個空值,所以如果函式的邏輯中有錯誤,將不會再返回一個空型別來報錯。你也可以驗證一下。

function sum(?int $a, ?int $b): ?int{

if ($a == null || $b == null) { return null;

} return $a + $b;

}

要注意的是:呼叫沒有引數的函式將丟擲異常!

var_dump(sum(null, null)); // NULLvar_dump(sum()); // throw ArgumentCountError exception

這意味著,當他們沒有預設值時,應該顯示指定引數。

還有就是,在過載或實現方法時不能把可空型別作為返回型別,但你可以刪除它。反之亦然!

interface Fooable {

function foo(): ?Fooable;}interface StrictFooable extends Fooable {

function foo(): Fooable; // valid}interface Fooable {

function foo(): Fooable;}interface LooseFooable extends Fooable {

function foo(): ?Fooable; // invalid}

解構陣列

當我們解構陣列是通常會這樣做:

list($a, $b, $c) = [1, 2, 3];

var_dump($a, $b, $c); // int(1) int(2) int(3)

但這是錯的,因為我們不能指定鍵來提取和嘗試使用索引鍵的功能

list($a, $b, $c) = ["a" => 1, "b" => 2, "c" => 3];

var_dump($a, $b, $c); // NULL NULL NULL

RFC提供了更多的控制陣列的解構。上面的程式碼可以改為:

list("a" => $a, "b" => $b, "c" => $c) = ["a" => 1, "b" => 2, "c" => 3];

var_dump($a, $b, $c); // int(1) int(2) int(3)

上面的例子可以寫成:

["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];

var_dump($a, $b, $c); // int(1) int(2) int(3)

很酷對不對?它還適用於多維陣列:

[[$a, $b], [$c, $d]] = [[1, 2], [3, 4]];

var_dump($a, $b, $c, $d); // int(1) int(2) int(3) int(4)[["b" => $b], ["c" => $c]] = [["a" => 1, "b" => 2], ["c" => 3, "d" => 4]];

var_dump($b, $c); // int(2) int(3)

Iterable 偽類

PHP 7.1 新引入了一個被稱為 iterable 的偽類。

它可以被用在引數或者返回值型別中,它代表接受陣列或者實現了 Traversable 介面的物件。以下面的程式碼為例:

// PHP 5.6function dump(array $items){

var_dump($items);

}

dump([2, 3, 4]);

dump(new Collection());

array(3) {

[0]=>

int(2)

[1]=>

int(3)

[2]=>

int(4)

}

Catchable fatal error: Argument 1 passed to dump() must be of the type array, object given...

但在這種情況下,函式不會接受一個價值,將丟擲一個錯誤。這一新的變化,讓你使用迭代來描述而不是手動一個價值主張。

// PHP 7.1function dump(iterable $items){

var_dump($items);

}

dump([2, 3, 4]);

dump(new Collection());

array(3) {

[0]=>

int(2)

[1]=>

int(3)

[2]=>

int(4)

}

object(Collection)#2 (0) {}

void返回型別

這是我最喜歡的新功能之一。PHP 7添加了指定函式返回型別的特性,一個新的'返回值型別 void 被引入。試圖去獲取一個void 方法的返回值時,將被迫返回null!並且不會產生任何警告。

function dump($object): void{

var_dump($object);

}

返回型別宣告為 void 型別的方法要麼乾脆省去 return 語句,要麼新增一個空的函式(return;)。

類常量的可見性

雖然這是個很小的變化,但是加強了面向物件的封裝,現在起支援設定類常量的可見性:

class Post{

protected const PUBLISHED = 1; protected const DRAFT = 2; protected const TRASHED = 3; // ...}

捕獲多個異常型別

在以往的try... catch 語句中,每個catch 只能設定一個條件判斷,新的版本可以在一個 catch 中設定多個條件,從而減少了需要複製的程式碼。 Java 等其他語言同樣具備這種能力。以下面的程式碼為例:

// { $user->payMonth($month);

} catch (UserSuspendedException $ex) {

DB::rollBack(); return redirect()

->back()

->withInput()

->withErrors([$ex->getMessage()]);

} catch (PaidMonthException $e) {

DB::rollBack(); return redirect()

->back()

->withInput()

->withErrors([$ex->getMessage()]);

}// ...

英文原文:

標籤: PHP71
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/php/rdvwp3.html