Zend Framework でのファクトリー パターンのアプリケーションの概要

高洛峰
リリース: 2017-01-05 10:00:01
オリジナル
1092 人が閲覧しました

まず、いくつかの概念を引用しましょう:
ファクトリ パターン: 他のクラスのインスタンスの作成を担当するクラスを具体的に定義します。作成されたインスタンスは通常、同じ親クラスを持ちます。ファクトリ パターンは、通常、異なる独立変数に基づいて異なるクラスのインスタンスを返すクラス作成パターンです。
ファクトリ パターンの本質は、ファクトリ クラスが、受信したパラメータに基づいてどの製品インスタンスを作成するかを動的に決定することです。工場パターンには、工場の役割、抽象的な製品の役割、および特定の製品の役割が含まれます。
ファクトリー (クリエイター) ロール: これは、すべてのインスタンスを作成する内部ロジックの実装を担当します。ファクトリ クラスは外部から直接呼び出して、必要な製品オブジェクトを作成できます。
抽象プロダクト (Product) の役割: ファクトリ パターンによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスに共通のパブリック インターフェイスを記述します。
具体的なプロダクトの役割: これは、ファクトリ パターンの作成ターゲットです。すべてのオブジェクトは、この役割を果たす特定のクラスのインスタンスです。 ZF の
zend_db はファクトリー パターンの良い例です。
次に分析が始まります。 。 。 。 。 。
zfを設定する際、データベース接続操作情報をBootstrap.phpファイルに入れることができます

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
function __construct($app){ 
parent::__construct($app); 
$url=constant(&#39;APPLICATION_PATH&#39;).DIRECTORY_SEPARATOR.&#39;configs&#39;.DIRECTORY_SEPARATOR.&#39;config.ini&#39;; 
$dbconfig=new Zend_Config_Ini($url,null,true); 
$db=Zend_Db::factory($dbconfig->general->db->adapter,$dbconfig->general->db->params->toArray()); 
// var_dump($db); 
$db->query(&#39;SET NAMES UTF8&#39;); 
Zend_Db_Table::setDefaultAdapter($db); 
} 
} 
?>
ログイン後にコピー

エントリファイルで、Zend_Applicationオブジェクトを介してbootstrap()を呼び出すと、Bootstrapクラスのコンストラクタが呼び出されます。
コンストラクターでは、Zend_Db::factory() を通じて、データベースを操作するためのオブジェクト インスタンスを取得できます。
Zend_Config_Ini インスタンスを通じて config.ini 内の関連情報を読み取り、それをパラメーターとしてファクトリ関数 Zend_Db::factory() に渡します
Config.ini 情報
[一般]
db.adapter =PDO_MYSQL
db.params.host =localhost
db.params.username =root
db.params.password =
db.params.dbname = データベース名
Zend_Db::factory()
パラメータ 1: PDO_MYSQL など、操作するデータベースのタイプを示します
パラメータ 2: サーバー名、ユーザー名、パスワード、接続するデータベースなど、データベースに接続するための情報を示します。

まず 2 つの質問をします:
①操作したいデータベースが MSSQL の場合、操作方法
②ここでは Zend_Db::factory() を使用します。従来の方法を使用する場合、どうすればよいでしょうか?

答え:
① config.ini ファイル内の PDO_MYSQL を PDO_MSSQL に変更するだけです
②従来の方法でデータベースを操作します 例:
$db=new Zend_Db_Adapter_Pdo_Mysql($config)
その中に: $config 情報は config.ini から読み込まれます
問題は、従来の方法を使用してオブジェクト インスタンスを作成すると、現在の操作対象のデータベースの種類を決定するプロセスが必要です。
例:

switch ($dbType){ 
case &#39;PDO_MYSQL&#39;: 
.... 
case &#39;PDO_MSSQL&#39;: 
.... 
case &#39;PDO_SQLITE&#39;: 
.... 
}
ログイン後にコピー

データベースを操作するには、データベースの種類に応じて異なるステートメントを作成する必要があります。これは非常に面倒ではありませんか?
ただし、これはすべて zf によってすでに行われています。それを使用してみましょう。とても便利です

Zf でファクトリーモードを実装するにはどうすればよいですか?
まず、抽象基本クラスが必要です: Zend_Db_Adapter_Abstract。このクラスは、ファクトリ パターンによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスに共通のインターフェイスを提供します。
このクラスは、select、update、insert、delete、query、fetchRow、fetchAssoc など、データベースの操作によく知られているいくつかの実装メソッドを提供するだけでなく、次のようなサブクラスでの実装用のインターフェイスも提供します。 :limit、getServerVersion、closeConnection、describeTable など。

abstract class Zend_Db_Adapter_Abstract 
{ 
//.. 
} 
abstract class Zend_Db_Adapter_Pdo_Abstract extends Zend_Db_Adapter_Abstract 
{ 
//.. 
} 
class Zend_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//...实现针对Mysql数据库的操作 
} 
class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....实现针对Mssql数据库的操作 
} 
class Zend_Db_Adapter_Pdo_Sqlite extends Zend_Db_Adapter_Pdo_Abstract 
{ 
//....实现针对Sqlite数据库的操作 
}
ログイン後にコピー

上記の関係は、図で簡単に表現できます

工厂模式在Zend Framework中应用介绍

次に、Zend_Db::Factory() がデータベースのさまざまなパラメーターに基づいてさまざまな選択をどのように実装するかを追跡しましょう。 。

Zend Framework でのファクトリー パターンのアプリケーションを紹介するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート