」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > PHP 建構函式屬性推廣初學者指南

PHP 建構函式屬性推廣初學者指南

發佈於2024-11-08
瀏覽:982

A Beginner’s Guide to Constructor Property Promotion in PHP

PHP 8 引進了一個名為 建構子屬性提升 的奇妙功能。如果您是 PHP 或一般程式設計新手,這可能聽起來有點複雜。但別擔心!本部落格將透過大量編碼範例向您介紹它是什麼、為什麼有用以及如何使用它。開始吧!

什麼是建築商財產促銷?

在 PHP 8 之前,建立具有屬性的類別並在建構函式中初始化它們需要相當多的重複程式碼。透過 建構函數屬性提升,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 類別。

建築商財產促銷的好處

  1. **更少的樣板程式碼:**您不需要編寫重複的程式碼來宣告和初始化屬性。

  2. 可讀性增強:類別定義更簡潔,一目了然。

  3. 減少錯誤:透過結合屬性宣告和初始化,可以減少出錯的空間。

結論

PHP 8 中的建構函式屬性提升是一項強大的功能,可以顯著改進您編寫類別的方式。透過減少樣板程式碼、提高可讀性並使程式碼更易於維護,這是新的和經驗豐富的開發人員都會欣賞的功能。

無論您是建立小型專案還是大型應用程序,建構函數屬性提升都將幫助您編寫更清晰、更有效率的 PHP 程式碼。因此,繼續吧,在您的下一個專案中嘗試一下,並享受這個出色功能的好處!

版本聲明 本文轉載於:https://dev.to/asfiaaiman/a-beginners-guide-to-constructor-property-promotion-in-php-5p1?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 JavaScript 中安全處理空值
    如何在 JavaScript 中安全處理空值
    JavaScript 中的空值檢查使用 JavaScript 時,正確處理「空」值至關重要。但是,標準空檢查可能並不總是按預期工作。讓我們探討原因並提供替代解決方案。 了解JavaScript 的Null Check在JavaScript 中,相等運算子(==) 和嚴格相等運算子(===)分別檢查值...
    程式設計 發佈於2024-11-08
  • 使用 AWS Lambda 為 Next.js 建置無伺服器後端
    使用 AWS Lambda 為 Next.js 建置無伺服器後端
    在不斷發展的 Web 開發世界中,利用無伺服器架構已經成為遊戲規則的改變者,尤其是對於 Next.js 應用程式而言。透過整合 AWS Lambda,開發人員可以建立可擴展且高效的後端,而無需管理伺服器的開銷。在這篇文章中,我們將探討如何使用 AWS Lambda 為您的 Next.js 應用程式...
    程式設計 發佈於2024-11-08
  • 當你開始學習程式語言時會發生什麼
    當你開始學習程式語言時會發生什麼
    在數位時代,學習程式語言不僅是一種優勢,而且是一種必要。無論您的目標是提升職業生涯、建立創新應用程序,還是只是更好地了解數位世界,程式設計技能都是不可或缺的。讓我們深入探討您應該踏上這趟變革之旅的原因和方法。 學習程式語言的重要性 職涯發展 根據美國勞工統計局的數據...
    程式設計 發佈於2024-11-08
  • 如何使用匿名結構或聯合編譯 C 程式碼?
    如何使用匿名結構或聯合編譯 C 程式碼?
    使用匿名結構/聯合編譯C 代碼出現了關於如何使用匿名結構或聯合編譯C 代碼的問題,如C 具有使用聯合的匿名欄位。在 C 中,嘗試使用包含匿名聯合的命名結構建立類似的結構會導致編譯錯誤。 錯誤訊息表示匿名聯合和結構欄位未在結構聲明中聲明。若要在 C 中啟用此功能,必須使用 -fms-extension...
    程式設計 發佈於2024-11-08
  • 如何使用 OpenSSL 和 C++ 產生 SHA256 雜湊值?
    如何使用 OpenSSL 和 C++ 產生 SHA256 雜湊值?
    使用 OpenSSL 和 C 產生 SHA256 雜湊 雜湊是一種加密技術,用於產生資料的唯一指紋或摘要。對於 SHA256(安全雜湊演算法 2,256 位元),此摘要是 256 位元十六進位字串。 SHA256 通常用於檢查資料完整性、驗證數位簽章和安全儲存密碼。 在本文中,我們將介紹如何使用 O...
    程式設計 發佈於2024-11-08
  • 探索軟體工程師的就業市場
    探索軟體工程師的就業市場
    Introduction In this article, we dive into the process of extracting and analyzing job data from LinkedIn, leveraging a combination of Python...
    程式設計 發佈於2024-11-08
  • 如何優化FastAPI中大數據的JSON回應效能?
    如何優化FastAPI中大數據的JSON回應效能?
    利用大數據提高 FastAPI 中 JSON 回應的效能FastAPI 用戶在透過端點傳回大量 JSON 資料時遇到嚴重延遲。全面的解決方案涉及解決多個因素,包括資料檢索、序列化和客戶端顯示。 資料提取和讀取如範例程式碼中突出顯示的,資料最初使用Pandas 的read_parquet() 函數從P...
    程式設計 發佈於2024-11-08
  • 在 React 中的選項卡之間發送資料。
    在 React 中的選項卡之間發送資料。
    本文將介紹如何在 React 全域元件之間發送數據,甚至在不同的瀏覽器標籤中也是如此。 故事 想像您有一個項目列表,例如用戶。 每個使用者都可以在模態視窗中開啟進行修改。 您沒有任何後端訂閱,這表示如果使用者發生變化,使用者清單不會自動與後端同步。 因此,一旦使用者的個人資料...
    程式設計 發佈於2024-11-08
  • 如何從 WPF 中的非調度程序執行緒修改 ObservableCollection?
    如何從 WPF 中的非調度程序執行緒修改 ObservableCollection?
    「這種類型的CollectionView 不支援從與調度程式執行緒不同的執行緒更改其SourceCollection」問題描述A DataGrid 綁定非同步填充的ObservableCollection 會拋出錯誤,指出不允許從非Dispatcher 執行緒對SourceCollection 進行...
    程式設計 發佈於2024-11-08
  • SQL Server 中的日期時間和時間戳記有什麼不同?
    SQL Server 中的日期時間和時間戳記有什麼不同?
    了解SQL Server 中日期時間和時間戳記之間的差異雖然SQL Server 中的日期時間和時間戳記資料型別都處理日期和時間,但它們表現出根本的區別。 Datetime 是專為儲存日期和時間資訊而設計的資料類型。它支援多種格式和日期/時間計算。另一方面,Timestamp 並不是用來儲存日期和時...
    程式設計 發佈於2024-11-08
  • 如何使用現代前端開發技術建立令人驚嘆的網站
    如何使用現代前端開發技術建立令人驚嘆的網站
    在当今的数字时代,网页设计在给访问者留下持久印象方面发挥着至关重要的作用。随着数以百万计的网站争夺注意力,创建一个令人惊叹的、脱颖而出的网站比以往任何时候都更加重要。现代前端开发技术彻底改变了网站的构建方式,使设计美观、实用且响应灵敏的网站变得更加容易,从而提供最佳的用户体验。本文将深入探讨可帮助您...
    程式設計 發佈於2024-11-08
  • 讓我們建立一個簡單的 React hook 來偵測瀏覽器及其功能
    讓我們建立一個簡單的 React hook 來偵測瀏覽器及其功能
    使用者代理嗅探是最受歡迎的瀏覽器偵測方法。不幸的是,由於多種原因,前端開發不太容易使用它。瀏覽器供應商不斷嘗試讓嗅探變得不可能。因此,每個瀏覽器都有自己的使用者代理字串格式,解析起來非常複雜。 有一個更簡單的方法可以使用瀏覽器 CSS API 實現相同的目的,我將向您展示。那麼讓我們建立瀏覽器功能...
    程式設計 發佈於2024-11-08
  • 使用 Golang 的電子商務平台:了解乾淨的架構
    使用 Golang 的電子商務平台:了解乾淨的架構
    了解乾淨的架構 清潔架構(Clean Architecture)由 Robert C. Martin 推廣,是一種軟體設計理念,它將設計元素劃分為環級別。乾淨架構的主要規則是程式碼依賴關係只能從外層向內移動。這意味著: 業務規則不依賴 UI 或資料庫。 業務規則對外界一無所知。 ...
    程式設計 發佈於2024-11-08
  • TypeScript 與 JavaScript:開發人員的主要區別
    TypeScript 與 JavaScript:開發人員的主要區別
    JavaScript 是網路的核心語言,而 TypeScript 是基於它的現代增強語言。兩者都很強大,但它們的用途略有不同。這是一個快速細分: 1. 模式安全 JavaScript:鬆散型別。變數可以動態更改類型,從而導致潛在的運行時錯誤。 TypeScript:靜態型別。您定義...
    程式設計 發佈於2024-11-08
  • 每個 PHP 專家都該回答的問題
    每個 PHP 專家都該回答的問題
    自 1990 年代中期以來,PHP 一直是 Web 開發的重要語言,廣泛應用於網站後端。儘管出現了新的語言和框架,PHP 仍然很重要,尤其是在 WordPress 等平台上。如果您能解決以下八個主題,那麼您對PHP 的理解就相當高級了。 1. 建構開發環境 部署 PHP 開發環境...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3