このリポジトリは、Refactoring.Guru プロジェクトの一部です。
すべての古典的な GoF デザイン パターンの PHP サンプルが含まれています。
各パターンには 2 つの例が含まれています。
概念的な例では、詳細なコメントを含むパターンの内部構造が示されています。
RealWorld の例では、実際の PHP アプリケーションでパターンをどのように使用できるかを示します。
これらの例は PHP 7.3 以降を必要としますが、古いバージョンの PHP でも簡単に複製できます。
このバージョンでは、明示的な引数と戻り値の型の宣言が提供されており、動的型付け言語ではあまり明確ではないいくつかのパターンの機能をよりよく理解するのに役立ちます。
すべての例は、次のように PHP 実行可能ファイルを使用してコマンド ラインから起動できます。
php src/Path-to-example/index.php
最高のエクスペリエンスを実現するには、次の IDE でサンプルを使用することをお勧めします。
PHP アプリでこれら 2 つを実際に使用するためのまともなアイデアはありません。プロジェクトでそれらを使用した場合は、問題を投稿して、お気軽にアイデアを提案してください。
クライアントとは、パターンの一部として定義されたクラスのクライアントを意味します。これは、単に指定されたメソッドの呼び出し元または指定されたクラスのユーザーにすぎません。言い換えれば、パターンのクラスを使用するアプリケーションのコードの一部です。
まず概念的な例を見てください。ここには、パターン内の各クラスの詳細な説明、その役割、他のクラスとの接続があります。
単純なタイプミスの修正であれ、まったく新しい例であれ、助けていただければ幸いです。フォークを作成し、変更を加えてプルリクエストを送信するだけです。
変更をプロジェクトのコードの残りの部分と一貫性を保つのに役立つスタイル ガイドを次に示します。
すべてのコードは PSR2 コーディング スタイル ガイドに一致する必要があります
コードを 80 番目の文字でハードラップしてみてください。スクロールバーを使用せずに Web サイト上のコードをリストするのに役立ちます。
例は、次の名前空間規則と一致する必要があります: RefactoringGuru{pattern-name}{example-name}。例えば:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
すべてのコードを 1 つのファイル内に収めることを目指してください。はい、それが運用環境で行われるはずの方法ではないことは理解しています。ただし、すべてのコードが 1 つの画面に収まるため、例をよりよく理解できます。
コメントには次のような言語タグが含まれる場合と含まれない場合があります。
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
この表記法は、コードを 1 か所に保管しながら、Web サイトがリストされているすべての言語に対して個別のバージョンの例を生成できるようにするのに役立ちます。恐れることなく、そのようなコメントの英語以外の部分は無視してください。このようなコメントで何かを変更したい場合は、そのまま変更してください。間違った操作を行った場合でも、プル リクエスト中に修正方法を説明します。
この作品は、クリエイティブ コモンズ 表示 - 非営利 - 改変禁止 4.0 国際ライセンスに基づいてライセンスされています。
著者: Alexander Shvets (@neochief) および Alexey Pyltsyn (@lex111)