찾다
php教程php手册工厂模式在Zend Framework中应用介绍

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

Jun 13, 2016 am 11:59 AM
frameworkzend하나소개하다존재하다정의공장애플리케이션인용하다우리를개념모델첫 번째

首先我们先引用些概念:
工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有其同的父类。工厂模式属于类的创建模式,通常根据自变量的不同返回不同类的实例。
工厂模式的实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品的实例。工厂模式式涉及到工厂角色、抽象产品角色和具体产品角色。
工厂(Creator)角色:是工厂模式的核心,它负责实现创建所有实例的内部逻。工厂类可以被外界直接调用,创建所需产品对象。
抽象产品(Product)角色:是工厂模式所创建所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete 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_Db_Table::setDefaultAdapter($db);
}
}
?>


在入口文件处,通过一个Zend_Application对象来调用bootstrap(),类Bootstrap的构造函数就会被调用。
在构造函数中,通过Zend_Db::factory()我们就能得到一个操作数据库的对象实例。
通过一个Zend_Config_Ini 实例读取config.ini中相关信息作为参数传递给工厂函数Zend_Db::factory()
config.ini 的信息
[general]
db.adapter =PDO_MYSQL
db.params.host =localhost
db.params.username =root
db.params.password =
db.params.dbname = 数据库名
Zend_Db::factory()
其中参数一:表示要操作的数据库类型,比如PDO_MYSQL
参数二:表示连接数据库的信息,包括服务器名,用户名,密码,要连接的数据库

先抛出两个提个问题:
①如果我们要操作的数据库是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通过工厂模式都已经帮我们做好了,使用起来非常方便

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_Db::Factory()到底是实现根据不同的参数选择不同的数据库的。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구