該存儲庫是 Refactoring.Guru 專案的一部分。
它包含所有經典 GoF 設計模式的 PHP 範例。
每個模式包括兩個範例:
概念範例顯示了模式的內部結構,包括詳細的註解。
真實世界的範例展示瞭如何在真實的 PHP 應用程式中使用模式。
這些範例需要 PHP 7.3 及更高版本,儘管它們可以在舊版本的 PHP 中輕鬆複製。
這個版本提供了明確的參數和返回類型聲明,這有助於更好地理解一些在動態類型語言中不太明顯的模式特徵。
所有範例都可以透過命令列啟動,使用 PHP 可執行文件,如下所示:
php src/Path-to-example/index.php
為了獲得最佳體驗,我建議使用以下 IDE 來使用範例:
對於這兩個在 PHP 應用程式中的實際用途,我沒有什麼好的想法。如果您在專案中使用過它們,請隨時透過發布問題向我提出想法。
客戶端是指類別的客戶端,定義為模式的一部分,它只是給定方法的呼叫者或給定類別的使用者。換句話說,它是應用程式程式碼中使用模式類別的部分。
首先看一下概念範例。在那裡您將找到模式中每個類別、其角色以及與其他類別的連接的詳細描述。
我感謝任何幫助,無論是簡單的拼字錯誤修復還是全新的範例。只需建立一個分叉,進行更改並提交拉取請求即可。
這是一個風格指南,可以幫助您使更改與專案程式碼的其餘部分保持一致:
所有代碼應符合 PSR2 編碼風格指南
嘗試將代碼硬包裝在第 80 個字元。它有助於在沒有滾動條的情況下在網站上列出程式碼。
範例應符合下列命名空間約定:RefactoringGuru{pattern-name}{example-name}。例如:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
目標是將所有程式碼放在一個檔案中。是的,我意識到這不是在生產中應該如何完成的。然而,它可以幫助人們更好地理解範例,因為所有程式碼都適合一個螢幕。
評論中可能有也可能沒有語言標籤,例如:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
此表示法有助於將程式碼保留在一個位置,同時允許網站為所有列出的語言產生單獨版本的範例。不要害怕並忽略此類評論的非英語部分。如果你想改變這樣的評論中的某些內容,那就去做吧。即使您做錯了,我們也會在 Pull Request 期間告訴您如何修復它。
本作品根據 Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License 授權。
作者:Alexander Shvets (@neochief) 和 Alexey Pyltsyn (@lex111)