ホームページ >バックエンド開発 >PHPチュートリアル >PHP のファクトリーパターンを理解する
ファクトリ クラスは、他のオブジェクトを作成するために特別に使用されるクラスです。ファクトリ クラスは、ポリモーフィック プログラミングの実践において非常に重要です。これにより、クラスの動的な置換や構成の変更が可能になり、アプリケーションがより柔軟になります。ファクトリ パターンを習得することは Web 開発にとって不可欠です。
ファクトリ パターンは、通常、インターフェイスと同様のさまざまなクラスを返すために使用されます。ファクトリの一般的な用途は、多態性プロバイダーを作成することです。
通常、ファクトリ パターンにはキー構造があり、これは一般にファクトリという名前の静的メソッドです。この静的メソッドは任意の数のパラメータを受け入れることができ、オブジェクトを返す必要があります。
プログラムリスト: 基本ファクトリークラス
class Fruit {
// ファクトリクラスから返されるオブジェクト
}
Class FruitFactory {
public static function Factory() {
// のいずれかを返しますオブジェクト 新しいインスタンス
return new Fruit();
}
}
// ファクトリーを呼び出す
$instance = FruitFactory::factory();
?>
プログラムリスト: ファクトリクラスを使用してオブジェクトを生成します
< ;? php
class Example
{
// パラメータ化されたファクトリメソッド
public static function Factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_ ' . $type;
return new $classname;
// SQLite ドライバーをロードします
$sqlite = Example::factory('SQLite');
?>
プログラムリスト: A完全なファクトリ クラス
次のプログラムは、一般的なファクトリ クラスを定義します。すべての操作を保存できる空のオブジェクトが生成され、インスタンスを取得できます。これらの操作はすべてそのインスタンス内にあります。
/**
* 一般的な Factory クラス
*
* この Magic Factory は、それに対して実行されるすべての操作を記憶します
* そして、それらをインスタンス化するオブジェクトに適用します。
*
*/
class FruitFactory {
private $history, $class, $constructor_args;
/**
* 指定されたクラスのファクトリーを作成します。渡される追加の引数を受け入れます
* クラス コンストラクター
*/
__ construct( $class ) {
$ args = func_get_args();
$this->class = $class;
$this->constructor_args = array_slice( $args, 1 );
}
function __call( $method, $args ) {
$this ->history[] = array(
'アクション' =>> '呼び出し',
'メソッド' => $method,
'args' => $args
);
}
function __set( $ property, $value ) {
$this->history[] = array(
'action' =>> 'set',
'property' => $property,
'値' => $値
) ;
}
/**
* インスタンスを作成し、この MagicFactory で行われたすべての操作を実行します
*/
functioninstance() {
# $args を使用して Reflection を使用して新しいインスタンスを作成します
$reflection_object = new lectionClass( $this->class );
$object = $reflection_object->newInstanceArgs( $this->constructor_args );
# ReflectionClass を使用しないが変数をサポートしない代替メソッド
# コンストラクターパラメータの数
//$object = new $this->class();
# 記憶されているすべての操作を繰り返し、適用します新しいオブジェクトへ
foreach( $this->history as $item ) {
if( $item['action'] == 'call' ) {
call_user_func_array( array( $object['method, '] ), $item['args'] );
}
if( $item['action'] == 'set' ) {
$object->{$item['property']} = $item[' value'];
}
}
# Done
return $object;
}
}
class Fruit {
private $name, $color;
public $price;
function __construct( $name, $color ) {
$this->name = $name;
$this->color = $color;
}
function setName( $name ) {
$this->name = $name;
} }
function recruit() {
print "こんにちは、これは {$this->name} {$this->sirname} です、価格は {$ this -& gt; 価格} rmb. ";;
}}}
# 派閥を設定します
$ Fruit_Factory = New FruitFactory ('FRUIT', 'Apple', 'Gonn'); -& gt; setname ('Apple' );
$fruit_factory->price = 2;
# インスタンスを取得します
$apple = $fruit_factory->instance();
$apple->introduce();
?>
プログラム実行結果:
ファクトリ パターンは、目的を達成するためにオブジェクトを作成する特定のプロセスを保護および分離するために、主にオブジェクトを作成するための遷移インターフェイスを提供します。柔軟性の向上。
PHP のファクトリー パターン Factory Pattern の理解に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。