php 7.0 引入類型聲明并支持嚴(yán)格模式,提升代碼健壯性。1. 啟用方式是在文件頂部添加 declare(strict_types=1); 且必須為第一行;2. 類型聲明支持 int、Float、String、bool 等基本類型,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 從 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)注了。