PHP 8 引進了一個名為 建構子屬性提升 的奇妙功能。如果您是 PHP 或一般程式設計新手,這可能聽起來有點複雜。但別擔心!本部落格將透過大量編碼範例向您介紹它是什麼、為什麼有用以及如何使用它。開始吧!
在 PHP 8 之前,建立具有屬性的類別並在建構函式中初始化它們需要相當多的重複程式碼。透過 建構函數屬性提升,PHP 8 可讓您直接在建構子參數中宣告和初始化類別屬性,從而簡化了此過程。
建構函式屬性提升不僅僅是節省幾行程式碼,而是讓您的程式碼更乾淨、更易於閱讀、更易於維護。這對於初學者來說尤其有價值,他們可能會發現編寫建構函數的傳統方法有點令人畏懼。
讓我們先將編寫類別和建構函數的傳統方式與 PHP 8 中引入的新方式進行比較。
class Car { public string $make; public string $model; public int $year; public function __construct(string $make, string $model, int $year) { $this->make = $make; $this->model = $model; $this->year = $year; } } $car = new Car('Toyota', 'Corolla', 2020);
在此範例中,我們必須宣告屬性($make、$model 和 $year),然後在建構子內指派它們。這是很多重複,特別是在處理具有許多屬性的類別時。
使用 PHP 8(建構子屬性提升)
class Car { public function __construct( public string $make, public string $model, public int $year ) {} } $car = new Car('Toyota', 'Corolla', 2020);
透過建構函式屬性提升,您可以在建構函式參數中宣告並指派屬性。結果是一個更簡潔和可讀的類別定義。
為了充分了解Constructor Property Promotion的力量,讓我們探索不同場景下的更多範例。
範例 1:定義 Book 類別
class Book { public function __construct( public string $title, public string $author, public int $pages, public bool $isAvailable = true ) {} } $book = new Book('1984', 'George Orwell', 328); echo $book->title; // Output: 1984 echo $book->isAvailable; // Output: 1 (true)
在此 Book 類別中,isAvailable 屬性的預設值為 true。如果在建立類別的實例時不指定該參數,則會自動設為true。
範例 2:建立訂單類別
class Order { public function __construct( public int $orderId, public string $product, public float $price, public string $status = 'pending' ) {} } $order = new Order(123, 'Laptop', 999.99); echo $order->status; // Output: pending $order2 = new Order(124, 'Smartphone', 599.99, 'shipped'); echo $order2->status; // Output: shipped
此處,Order 類別包含一個預設值為待處理的狀態屬性。但是,您可以透過在建立訂單時提供不同的狀態來覆寫此值。
範例 3:建立使用者設定檔類別
class UserProfile { public function __construct( public string $username, public string $email, public int $age, private string $password, protected string $role = 'user' ) {} public function getPassword(): string { return $this->password; } } $userProfile = new UserProfile('johndoe', '[email protected]', 25, 'secret'); echo $userProfile->username; // Output: johndoe echo $userProfile->getPassword(); // Output: secret echo $userProfile->role; // Error: Cannot access protected property
在 UserProfile 類別中,password 屬性是私有的,這表示不能在類別外部直接存取它。相反,您可以使用 getPassword() 方法來檢索它。角色屬性受到保護,因此只能在類別本身或子類別中存取它。
範例 4:具有建構子屬性提升的產品類別
class Product { public function __construct( public string $name, public float $price, public int $stock = 0 ) {} } $product = new Product('Laptop', 999.99, 10); echo $product->name; // Output: Laptop echo $product->stock; // Output: 10
此範例示範如何使用建構函式屬性提升來建立包含 stock 屬性預設值的 Product 類別。
**更少的樣板程式碼:**您不需要編寫重複的程式碼來宣告和初始化屬性。
可讀性增強:類別定義更簡潔,一目了然。
減少錯誤:透過結合屬性宣告和初始化,可以減少出錯的空間。
PHP 8 中的建構函式屬性提升是一項強大的功能,可以顯著改進您編寫類別的方式。透過減少樣板程式碼、提高可讀性並使程式碼更易於維護,這是新的和經驗豐富的開發人員都會欣賞的功能。
無論您是建立小型專案還是大型應用程序,建構函數屬性提升都將幫助您編寫更清晰、更有效率的 PHP 程式碼。因此,繼續吧,在您的下一個專案中嘗試一下,並享受這個出色功能的好處!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3