ホームページ >php教程 >php手册 >Zend Framework でのファクトリー パターンのアプリケーションの概要

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

WBOY
WBOYオリジナル
2016-06-13 11:59:351008ブラウズ

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

コードをコピーします コードは次のとおりです:


class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
function __construct($app){
parent::__construct($app); constant( 'APPLICATION_PATH').DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'config.ini';
$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('SET NAMES UTF8');
}
}
?>エントリ ファイル で、Zend_Application オブジェクトを通じて bootstrap() が呼び出されるとき、Bootstrap クラスのコンストラクターが呼び出されます。
コンストラクターでは、Zend_Db::factory() を通じて、データベースを操作するためのオブジェクト インスタンスを取得できます。
Zend_Config_Ini インスタンスを通じて config.ini 内の関連情報を読み取り、それをパラメータとしてファクトリ関数 Zend_Db::factory() に渡します。
Configuration.ini 情報
[general]

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){ ケース 'PDO_MYSQL' : .... ケース 'PDO_MSSQL':

....

ケース 'PDO_SQLITE':
....
}


データベースの種類に応じてデータベースを操作するための異なるステートメントを記述する必要がありますが、これは非常に面倒です
しかし、zf はファクトリ モードを通じてこれらすべてをすでに行っており、非常に便利です

Zf でファクトリー モードを実装するにはどうすればよいですか?
まず、抽象基本クラスが必要です: Zend_Db_Adapter_Abstract。このクラスは、ファクトリ パターンによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスに共通のインターフェイスを提供します。

このクラスは、select、update、insert、delete、query、fetchRow、fetchAssoc など、データベースの操作によく知られているいくつかの実装メソッドを提供するだけでなく、サブクラスで実装するためのいくつかのインターフェイスも提供します。例:limit、getServerVersion、closeConnection、describeTable など。



コードをコピー

コードは次のとおりです:


抽象クラス Zend_Db_Adapter_Abstract
{
//..
}
抽象クラス 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_Db::Factory() がさまざまなパラメーターに基づいてさまざまなデータベースをどのように選択するかを追跡しましょう。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。