目錄
2. 函數傳回值類型宣告
3. 標量類型宣告
4. use 批次宣告
首頁 後端開發 php教程 php7新增標量,運算符,傳回值類型的特性詳解

php7新增標量,運算符,傳回值類型的特性詳解

Jun 27, 2017 am 10:19 AM
php php7 運算符

1. ?? 運算子(NULL 合併運算子)

$a = $_GET['a'] ?? 1;
登入後複製

它相當於:

$a = empty($_GET['a']) ? 1 : $_GET['a'];
登入後複製

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

$a ?: 1
登入後複製

但是這是建立在$a 已經定義了的前提上。新增的 ?? 運算子可以簡化判斷。簡化程式碼的同時也更直觀了!

2. 函數傳回值類型宣告

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

<?php
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]));
登入後複製

從這個範例可以看出現在函數(包括匿名函數)都可以指定回傳值的型別。

這個特性可以幫助我們避免一些 PHP 的隱含型別轉換所帶來的問題。在定義一個函數之前就想好預期的結果可以避免一些不必要的錯誤。

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

使用傳回值類型宣告時,如果沒有宣告為嚴格模式,如果傳回值不是預期的型別,PHP 會會對其進行強制型別轉換。但如果是嚴格模式, 則會出發一個 TypeError 的 Fatal error。

強制模式:

<?php
function foo($a) : int
{
    return $a;
}

foo(1.0);
登入後複製

以上程式碼可以正常執行,foo 函數回傳 int 1,沒有任何錯誤。

嚴格模式:

<?php
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
登入後複製

3. 標量類型宣告

PHP 7 中的函數的形參類型宣告可以是標量了。在PHP 5 中只能是類別名稱、介面、array 或 callable (PHP 5.4,即可以是函數,包含匿名函數),現在也可以使用 stringintfloat和 bool# 了。

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, &#39;3&#39;, 4.1));
登入後複製

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

4. use 批次宣告

PHP 7 中use 可以在一句話中宣告多個類別或函數或const 了:

<?php
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};
登入後複製

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

要留意的問題是:如果你使用的是基於 composer 和 PSR-4 的框架,這種寫法是否能成功的載入類別檔案?其實是可以的,composer 註冊的自動載入方法是在類別被呼叫的時候根據類別的命名空間去尋找位置,這種寫法對其沒有影響。

再來簡單說幾個:

1、PHP 5.3 開始有了匿名函數,現在又有了匿名類別了;

2、define 現在可以定義常數數組;

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

4、生成器(或稱為迭代器更合適)可以有一個最終回傳值(return),也可以透過 yield from 的新語法進入一個另外一個生成器(生成器委託)。

產生器的兩個新功能(return 和 yield from)可以組合。具體的大家可以自行測試。

以上是php7新增標量,運算符,傳回值類型的特性詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? 在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? Apr 01, 2025 pm 03:06 PM

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

如何在同一台服務器上通過Nginx配置讓PHP5.6和PHP7共存? 如何在同一台服務器上通過Nginx配置讓PHP5.6和PHP7共存? Apr 01, 2025 pm 03:15 PM

在同一系統中同時運行多個PHP版本是一個常見的需求,特別是當不同項目依賴於不同版本的PHP時。如何在同一台...

See all articles