PHP 設計模式簡介
已發表: 2020-04-14PHP 設計模式已被證明對開發人員非常有用,並且是一個主要的問題解決者。 為了編寫高效的代碼,開發人員必須遵循最佳實踐。 PHP 設計模式是一種面向對象的編程 (OOP) 概念,現在也用於 Drupal 8 項目。 隨著 Drupal 8 採用現代 PHP 和 OOP 概念,可以利用設計模式進行更清晰、更健壯的編程。

PHP 中的設計模式是什麼?
在軟件工程中,設計模式是軟件設計中常見問題的通用可重複解決方案。 好的面向對象設計應該是可重用、可維護和可擴展的,而 PHP 中的設計模式在這方面非常有幫助。 它不僅有助於解決問題,還暗示了解決共同挑戰的最佳方式。
使用 PHP 設計模式的好處
PHP 設計模式的主要優點是:
- PHP 設計模式有助於解決開發過程中面臨的重複問題
- 在 PHP 中使用設計模式可以讓設計者之間的交流更高效
- 查看您的代碼的其他開發人員不必費力理解,因為代碼結構良好,具有設計模式
- 遵循最佳實踐有助於構建更強大的軟件
- 它有助於使開發更快更容易
PHP 中廣泛使用的設計模式
設計模式可以在各種情況下使用來解決類似的問題。 大約有 23 種設計模式,可以大致分為三種類型的設計模式——創建模式、結構模式和行為模式。
創建模式:在對象創建機制中使用的設計模式,用於創建可以與實現它們的系統分離的對象。
結構模式:通過識別實現實體之間關係的簡單方法來簡化設計
行為模式:它們用於管理對象之間的關係、職責和算法
工廠模式
工廠模式用於構建對象。 沒錯——構建一個對象而不是創建一個對象。 當我們構建對象時,我們首先創建它,然後初始化它。 通常,它需要應用一定的邏輯並執行多個步驟。 有了這個,將所有這些放在一個地方並在需要以相同方式構建新對象時重新使用它是有意義的。 從根本上說,這就是工廠模式的使用。
為我們的工廠提供一個接口並讓我們的代碼依賴它而不是一個具體的工廠是一個好主意
界面 家庭工廠接口{ 上市 功能 創建():家庭 } |
接下來,使用以下類實現工廠接口:
班級 家庭工廠 工具 家庭工廠接口{ 上市 功能 創建():家庭{ $family = new Family(); // 初始化你的家庭 返回 $family; } } |
適配器模式
在適配器設計模式中,一個類將一個類的接口轉換為另一個類。在這個例子中,我們有一個TextBook類,它有一個 getTitle() 和 getAuthor() 方法。 客戶端需要一個 getTitleAndAuthor() 方法。 為了“適應”SimpleBook為demoAdapter我們有一個適配器類,BookAdapter,這需要在教科書的一個實例,並使用教科書的getTitle()和getAuthor()方法在自己的getTitleAndAuthor方法。
<?php 私人$title; $this ->author = $author_in; 功能 獲取標題(){ |
PHP 單例模式
為了將類的實例化限制為單個對象,PHP 中使用了單例模式。 當整個系統只需要一個對象時,這會很有用。 在設計 Web 應用程序時只允許訪問某個類的一個實例是有意義的。 為了防止從單例模式類顯式創建對象,使用了私有構造函數。
<?php ![]() |
PHP中的觀察者模式
PHP Observer 模式用於向系統的其餘部分發出有關特定位置的特定事件的警報。
例如,如果我們需要創建一個劇院來向評論家展示電影。 我們用當前方法定義了Theatre類。 在放映電影之前,我們想向影評人的手機發送消息。 然後,在電影中途我們要暫停電影5分鐘,讓影評人有一個間隔。 最後,在電影結束後,我們想請影評人留下他們的回應。 因此,在 PHP 的觀察者模式中,觀察者對象僅在狀態更改時收到通知。
這就是代碼的樣子 -
班級 劇院{ |
PHP 裝飾器模式
當您想在運行時更改對象的特徵時,可以使用裝飾器模式,從而減少不必要的繼承和類的數量。 嗯,可以舉例說明。 假設我們有類 Sofa 和 Bed,它們都實現了 SleeperInterface。
界面 睡眠者接口{ |
沙發和床都有相同的睡眠行為。 現在,我們需要其他具有附加功能的沙發和床,當用戶睡在沙發或床上時,它們會告訴用戶睡眠跟踪。 通過繼承,我們可以像這樣解決這個問題:
班級 智能沙發 延伸 沙發{ |
現在我們總共有4個班級。 然而,我們可以只用裝飾器模式用 3 個類來解決這個問題。 就是這樣:
班級 智能睡眠 工具 臥舖接口{ |
在這裡,我們引入了一種新型的 sleeper,它的作用類似於代理,但在其之上具有額外的功能。
在 Drupal 8 中利用設計模式
雖然在 Drupal 8 之前 Drupal 中已經建立了許多設計模式,但現在 Drupal 8 包含了許多以前不可用的模式。 其中一些新模式完全取代了一些舊模式,而另一些則為 Drupal 8 引入了一些新功能。
Drupal 8 中使用的設計模式包括:
- 面向對象的編程模式 (OOP)
- 依賴注入
- 工廠模式
- 單例模式
OOP 並不是真正的單一模式,而是一種超越設計模式的概念化和結構化代碼的完全激進的方式。 它是當今使用的許多流行軟件設計模式的基礎,包括在 Drupal 8 中使用的那些。它在 Drupal 7 中被引入,但沒有被廣泛使用,也不是必需的。 Drupal 8 中的情況現在不同了,它被廣泛使用,它是必需的。
依賴注入
依賴注入是一種軟件設計模式,它允許您刪除硬編碼的依賴項,並且還可以在運行時或編譯時更改它們。 添加依賴注入很容易,並且不會干擾您現有的代碼。 Drupal 8 引入了服務的概念,以分離可重用的功能。 core.services.yml 是 Drupal 8 中依賴注入的一個例子。我們已經在上面討論了 PHP 中的工廠模式和單例模式

