まず、いくつかの概念を引用します。
ファクトリ パターン: 他のクラスのインスタンスの作成を担当するクラスを具体的に定義します。作成されたインスタンスは通常、同じ親クラスを持ちます。ファクトリ パターンは、通常、異なる独立変数に基づいて異なるクラスのインスタンスを返すクラス作成パターンです。
ファクトリ パターンの本質は、ファクトリ クラスが、受信パラメータに基づいてどの製品インスタンスを作成するかを動的に決定することです。工場パターンには、工場の役割、抽象的な製品の役割、および特定の製品の役割が含まれます。
ファクトリー (クリエイター) ロール: これは、すべてのインスタンスを作成する内部ロジックの実装を担当します。ファクトリ クラスは外部から直接呼び出して、必要な製品オブジェクトを作成できます。
抽象プロダクト (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]
switch ($dbType){ ケース 'PDO_MYSQL' : .... ケース 'PDO_MSSQL':
....ケース 'PDO_SQLITE':
....
}
データベースの種類に応じてデータベースを操作するための異なるステートメントを記述する必要がありますが、これは非常に面倒です
しかし、zf はファクトリ モードを通じてこれらすべてをすでに行っており、非常に便利です
Zf でファクトリー モードを実装するにはどうすればよいですか?
まず、抽象基本クラスが必要です: Zend_Db_Adapter_Abstract。このクラスは、ファクトリ パターンによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスに共通のインターフェイスを提供します。
抽象クラス 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() がさまざまなパラメーターに基づいてさまざまなデータベースをどのように選択するかを追跡しましょう。