在大多數的專案中你可能經常會在 class 當中宣告屬性,並在建構子(Constructor) 中賦予數值。這樣的程式碼其實是相當重複的,當然通常你可能會透過 IDE 的擴充元件來快速建立這樣的語句 (例如 PHPStorm 跟 Visual Studio Code 的 Snippets),但在 PHP 8 這個問題已經被解決。
在 PHP 8 以前
在過去你可能會是這樣宣告物件,你會需要在類別中宣告屬性,並在建構子中重複的給予數值。
class Person
{
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
在 PHP 8 以後
你可以這樣做
class Person
{
public function __construct(public string $name, public string $email) {}
}
透過在建構子的參數中指定類別變數可視範圍 (public, protected, private) 就能夠自動的宣告類別變數並自動賦予數值。當然如果你有需要特別處理傳入的值時,你還是得自行處理。這個建構子參數不一定會需要給予型別,但不能重複進行宣告。
不可以重複宣告
class Person
{
public string $name; // <--- 會錯誤
public function __construct(public string $name, public string $email) {}
}
可以不用給予型別
class Person
{
public function __construct(public $name, public $email) {}
}