PHP 的型別宣告會在執行階段為函式引數、回傳值和類別屬性提供型別斷言。
在函式上,可以加上void回傳型別,表示這個函式不會回傳任何值。
宣告的型別同時也作為執行階段的斷言,確保函式回傳的結果具有合理的型別。
<?php
class Driver
{
private int $serial_number;
public function setSerialNumber(int $number): void
{
$this->serial_number = $number;
}
public function getSerialNumber(): int
{
return $this->serial_number;
}
}
$driver = new Driver();
$driver->setSerialNumber("Version 1b"); // This will throw a TypeError
如果函式引數、回傳值或類別屬性的型別可以超過一種,就可以宣告聯合型別。
<?php
class IdentityCard
{
private int|null $id = null;
public function assign(int|float $id): void
{
$this->id = intval($id);
}
}
$card = new IdentityCard();
$card->assign(5.0);
在撰寫程式碼時,我們有時無法明確指定型別。
從 PHP 8.0 開始,提供了一個名為mixed的逃生型別。
mixed等同於object|resource|array|string|float|int|bool|null的聯合型別。
你在市政府辦公室工作了一段時間,也開發出一套能加快日常工作的工具,例如填寫表單。
現在,有位新同事要加入你的行列,而你發現自己的工具可能不是那麼一看就懂。 你們辦公室裡有很多奇怪的規矩,例如表單一律用大寫字母填寫,而且不能留下空白欄位。
第一步,你決定加上 PHP 型別宣告,讓新同事能更快上手,開始使用你的工具。
為 Address類別中已宣告的每個屬性加上屬性型別宣告。
每個類別屬性都應該宣告為字串。
為 Form類別中的 blanks方法加上參數型別宣告和回傳型別宣告。
這個方法會接受一個整數長度,並回傳代表空白列的字串。
為 Form類別中的 letters方法加上參數型別宣告和回傳型別宣告。
這個方法會接受一個代表詞語的字串,並回傳由字母組成的陣列。
為 Form類別中的 checkLength方法加上參數型別宣告和回傳型別宣告。
這個方法會接受一個字串詞語和一個整數最大長度,並回傳 true 或 false 的值。
為 Form類別中的 formatAddress方法加上參數型別宣告(使用先前更新過的 Address類別)以及回傳型別宣告。
這個方法會接受一個 Address,並回傳格式化後的字串。