PHP中的類型聲明:如何在PHP中使用嚴(yán)格類型檢查

php 7.0 引入類型聲明并支持嚴(yán)格模式,提升代碼健壯性。1. 啟用方式是在文件頂部添加 declare(strict_types=1); 且必須為第一行;2. 類型聲明支持 intFloatStringbool 等基本類型,Array、callable 等復(fù)合類型,以及類、接口、聯(lián)合類型(php 8.0+)、可空類型(?type)等;3. 可對函數(shù)參數(shù)和返回值進(jìn)行類型約束,傳參或返回類型不匹配會拋出 typeerror;4. 返回值類型聲明可確保函數(shù)返回預(yù)期結(jié)構(gòu),支持使用 ?type 表示可能返回 NULL;5. 嚴(yán)格類型檢查僅影響當(dāng)前文件,對第三方庫無強(qiáng)制要求,性能開銷小;6. 即不啟用嚴(yán)格模式,類型聲明仍有助于 ide 提供更好提示。類型聲明配合嚴(yán)格模式使 php 在團(tuán)隊協(xié)作和長期維護(hù)中更清晰安全,只需在開頭添加聲明并按需標(biāo)注類型即可。

PHP中的類型聲明:如何在PHP中使用嚴(yán)格類型檢查

PHP 從 7.0 開始引入了類型聲明功能,讓開發(fā)者可以更清晰地定義變量、函數(shù)參數(shù)和返回值的類型。雖然 PHP 是一種弱類型語言,但通過使用嚴(yán)格類型檢查(strict mode),可以讓代碼更健壯、減少潛在錯誤。


啟用嚴(yán)格類型檢查

在 PHP 中啟用嚴(yán)格類型檢查非常簡單,只需要在腳本文件的頂部加上一行:

declare(strict_types=1);

這一行必須是文件的第一行內(nèi)容,不能有任何輸出或空白字符在它之前。一旦開啟,PHP 就會對函數(shù)參數(shù)、返回值等進(jìn)行嚴(yán)格類型檢查。例如:

立即學(xué)習(xí)PHP免費學(xué)習(xí)筆記(深入)”;

function add(int $a, int $b): int {     return $a + $b; }  add(1, 2);      // 正常 add("1", 2);    // 報錯:Argument 1 passed to add() must be of the type int, string given

如果傳入的參數(shù)類型不匹配,PHP 會拋出 TypeError 錯誤。


類型聲明支持的數(shù)據(jù)類型

PHP 支持多種類型的聲明,包括基本類型和復(fù)合類型:

  • 基本類型

    • int
    • float
    • string
    • bool
  • 復(fù)合類型

    • array
    • callable
    • iterable
    • object
  • 類與接口: 你可以直接指定某個類或接口作為參數(shù)類型:

class User {} function greet(User $user) {     echo "Hello!"; }
  • 聯(lián)合類型(union Types)(PHP 8.0+): 如果一個參數(shù)可以接受多個類型,可以用 | 來聲明:
function setPrice(float|int $price) {     // ... }
  • 可空類型(Nullable Types): 允許參數(shù)為 null,寫法是在類型前加個問號:
function setName(?string $name) {     // $name 可以為 null 或字符串 }

返回值類型聲明

除了參數(shù)類型之外,還可以對函數(shù)的返回值進(jìn)行類型聲明。這有助于確保函數(shù)始終返回預(yù)期的數(shù)據(jù)結(jié)構(gòu)

function getAge(): int {     return '30'; // 嚴(yán)格模式下會報錯,因為返回的是字符串而不是整數(shù) }

如果你希望函數(shù)可能返回 null,也可以使用可空類型:

function findUser(int $id): ?User {     // 如果找不到用戶,可以返回 null }

注意事項和常見問題

  • 只影響當(dāng)前文件:declare(strict_types=1); 只會影響當(dāng)前文件中的函數(shù)調(diào)用行為,不會影響被調(diào)用的其他文件。
  • 第三方庫兼容性:有些老項目或第三方庫沒有使用類型聲明,調(diào)用它們時可能會出現(xiàn)類型不匹配的問題。
  • 性能影響不大:類型檢查帶來的性能開銷可以忽略不計,主要是編譯期的行為。
  • IDE 更好提示:即使不開啟嚴(yán)格模式,類型聲明也能幫助 IDE 提供更好的自動補(bǔ)全和錯誤提示。

基本上就這些。類型聲明配合嚴(yán)格模式,能讓你的 PHP 代碼更清晰、更安全,尤其是在團(tuán)隊協(xié)作或長期維護(hù)中特別有用。只要記得在文件開頭加上那句聲明,剩下的就是按需加上類型標(biāo)注了。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊5 分享