ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン ファクトリ パターンの学習ノート_PHP チュートリアル
この記事では、php5 の新しい機能であるファクトリー モードを紹介します。ここでは、私がよく使用するファクトリー モードについての学習メモをいくつか紹介します。詳細を知りたい友人の参考にさせていただきます。
大規模なシステムでは、多くのコードがいくつかの主要なクラスに依存しています。これらのクラスを変更する必要がある場合、問題が発生する可能性があります。たとえば、ファイルから読み取る User クラスがあるとします。これをデータベースから読み取る別のクラスに変更したいと考えていますが、コードはすべてファイルから読み取る元のクラスを参照しています。このとき、ファクトリーモードを使用すると非常に便利です。
ファクトリ パターンは、オブジェクトを作成する特定のメソッドを持つクラスです。 new を直接使用せずに、ファクトリ クラスを使用してオブジェクトを作成できます。このようにすると、作成されるオブジェクトのタイプを変更する場合は、ファクトリを変更するだけで済みます。このファクトリを使用するすべてのコードは自動的に変更されます。
例1: ファクトリクラスの列を表示します。
この方程式のサーバー側は 2 つの部分で構成されます: データベースと、フィードバックの追加、フィードバック リストのリクエスト、特定のフィードバックに関連する記事の取得を可能にする一連の PHP ページです
コードは次のとおりです | コードをコピー |
インターフェイス IUser |
IUser インターフェイスは、ユーザー オブジェクトが実行する必要がある操作を定義します。 IUser の実装は User と呼ばれ、UserFactory ファクトリ クラスが IUser オブジェクトを作成します。この関係は、図 1 の UML で表すことができます。
図 1. ファクトリ クラスとそれに関連する IUser インターフェイスとユーザー クラス
php インタープリターを使用してコマンドラインでこのコードを実行すると、次の結果が得られます。
% php Factory1.php
ジャック
%
ファクトリーメソッドを使用するファクトリーパターンのバリエーションがあります。クラス内のこれらのパブリック静的メソッドは、その型のオブジェクトを構築します。このメソッドは、このタイプのオブジェクトを作成することが重要な場合に役立ちます。たとえば、オブジェクトを作成し、いくつかのプロパティを設定する必要があるとします。このバージョンのファクトリ パターンはプロセスを 1 か所にカプセル化するため、複雑な初期化コードをコピーしてコード ベース全体に貼り付ける必要がありません。
例 2 は、ファクトリ メソッドの使用例を示しています。
コードをコピー | |
インターフェイス IUser { 関数 getName(); } ユーザーが IUser を実装するクラス { パブリック静的関数 Load( $id ) { return 新しいユーザー( $id ); } パブリック静的関数 Create( ) { return new User( null ); } パブリック関数 __construct( $id ) { } パブリック関数 getName() { 「ジャック」を返します; } } $uo = ユーザー::Load( 1 ); echo( $uo->getName()."n" ); ?> |
コードは次のとおりです | コードをコピー |
include_once("f.inc.php"); |
f.inc.php
コードは次のとおりです | コードをコピー |
クラスファクトリー |
t1.inc.php
コードは次のとおりです | コードをコピー |
グローバル $config; |
t2.inc.php
コードは次のとおりです | コードをコピー |
クラスT2 |
index.php では、ファクトリ クラスを通じて他のクラスのインスタンスを作成します。
ファクトリには、array("クラス名" => "クラスファイルパス") の形式で保存された配列 $this->mClasses があります。
Factory::create() でクラス インスタンスを作成すると、create() でまずクラスが存在するかどうかがチェックされ、存在しない場合は、$this-> に従ってそのクラスに対応するクラス ファイルがインクルードされます。 mクラス。次に、このクラスのインスタンスを作成して返します。
この方法では、実行するスクリプト (index.php など) にファクトリ クラス ファイルを含めるだけで済みます。
t1.inc.php の次の 2 行のコードにも注目してください。
コードは次のとおりです | コードをコピー |
グローバル $config; $config='サーフチェン'; |
なぜグローバルが必要なのでしょうか? t1.inc.php は Factory::create に含まれているため、t1 ファイル内の変数はデフォルトで create の関数レベル変数になります。したがって、変数 ($config など) をグローバルにして、index.php が変数にアクセスできるようにする必要があります。
index.phpを実行すると出力されます
コードは次のとおりです | コードをコピー |
名前::T1surfchen |