建構子屬性提升 是 PHP 8 中引入的功能,可簡化類別中的屬性宣告和初始化。在 PHP 8 之前,您必須明確宣告類別屬性,然後在建構函式中初始化它們。透過此功能,您可以直接在建構函數的參數清單中宣告和初始化屬性,從而減少樣板程式碼。
傳統文法(PHP 8 之前)
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
建構子屬性提升語法 (PHP 8)
class Product { public function __construct( private string $name, private float $price ) {} }
好處
減少樣板程式碼:
提高可讀性:
支援不變性:
筆記
可見性修飾符:
預設值:
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
混合促銷與非促銷屬性:
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
用例
建構子屬性提升對於像DTO(資料傳輸物件)這樣的簡單類別特別有用,其中主要目的是儲存資料。
class CustomerDTO { public function __construct( public string $name, public string $email, public ?string $phone = null ) {} }
結論
建構函式屬性提升是 PHP 8 中的一項強大功能,可提高生產力並降低程式碼複雜性。對於需要簡潔明了初始化的具有多個屬性的類別來說,它是理想的選擇。
在PHP 8 中,屬性(也稱為註解)可以與構造函數屬性提升無縫結合,從而產生更乾淨、更具表現力的程式碼,尤其是在元資料需要與屬性關聯的場景中。
與建築商房產促銷整合
透過建構函式屬性提升,屬性直接在建構函式中定義。您可以使用 Attributes 來裝飾這些屬性並添加上下文訊息,而無需單獨聲明屬性。
實際範例
假設您正在處理 DTO(資料傳輸物件)並希望將屬性對應到資料庫列
沒有建築商房產促銷
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
與建築商房產促銷
class Product { public function __construct( private string $name, private float $price ) {} }
整合的好處
減少樣板程式碼:
更乾淨、更容易閱讀的程式碼:
反思的彈性:
透過反射存取屬性
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
代碼說明
定義列屬性:
為建構子參數新增屬性:
使用反射:
存取建構子:
迭代參數:
取得屬性:
實例化屬性:
列印元資料:
輸出:
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
常見用例
資料庫映射:
資料驗證:
序列化/反序列化:
結論
建構子屬性提升與屬性的整合提供了一種在PHP中建構類別的強大而簡潔的方法。這在依賴元資料(例如 ORM、驗證或序列化)的系統中特別有用,使程式碼更具表現力和組織性。
以上是PHP ews:建構函數屬性提升的詳細內容。更多資訊請關注PHP中文網其他相關文章!