まず、いくつかの概念を引用しましょう:
ファクトリ パターン: 他のクラスのインスタンスの作成を担当するクラスを具体的に定義します。作成されたインスタンスは通常、同じ親クラスを持ちます。ファクトリ パターンは、通常、異なる独立変数に基づいて異なるクラスのインスタンスを返すクラス作成パターンです。
ファクトリ パターンの本質は、ファクトリ クラスが、受信したパラメータに基づいてどの製品インスタンスを作成するかを動的に決定することです。工場パターンには、工場の役割、抽象的な製品の役割、および特定の製品の役割が含まれます。
ファクトリー (クリエイター) ロール: これは、すべてのインスタンスを作成する内部ロジックの実装を担当します。ファクトリ クラスは外部から直接呼び出して、必要な製品オブジェクトを作成できます。
抽象プロダクト (Product) の役割: ファクトリ パターンによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスに共通のパブリック インターフェイスを記述します。
具体的なプロダクトの役割: これは、ファクトリ パターンの作成ターゲットです。すべてのオブジェクトは、この役割を果たす特定のクラスのインスタンスです。
ZF の zend_db はファクトリ パターンの良い例です。
次に分析が始まります。 。 。 。 。 。
zf を設定するとき、データベース接続操作情報を Bootstrap.php ファイルに入れることができます
コードをコピーします コードは次のとおりです:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
function __construct( $app){
parent::__construct($app);
$url=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() に渡します
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 'PDO_MYSQL': .... case 'PDO_MSSQL':
....
case 'PDO_SQLITE' :
....
}
また、データベースの種類に応じてデータベースを操作するための異なるステートメントを記述する必要がありますが、これは非常に面倒ではありませんか?ファクトリーモードです。とても便利です
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 は Zend_Db_Adapter_Abstract を拡張します
{
//..
}
class Zend_Db_Adap ter_Pdo_ Mysql は 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
{ //....ライトデータベースのSqオペレーションのオペレーションを実装する
}
上記関係性を絵を使ってシンプルに表現します
次に、Zend_Db::Factory() がさまざまなパラメーターに基づいてさまざまなデータベースをどのように選択するかを追跡しましょう。
http://www.bkjia.com/PHPjc/325673.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/325673.html技術記事まず、いくつかの概念を引用します。 ファクトリ パターン: 他のクラスのインスタンスの作成を担当するクラスを具体的に定義します。作成されたインスタンスは通常、同じ親クラスを持ちます。ファクトリ パターンはクラス作成に属します...