우선 몇 가지 개념을 인용해 보겠습니다.
팩토리 패턴: 다른 클래스의 인스턴스 생성을 담당하는 클래스를 구체적으로 정의합니다. 생성된 인스턴스는 일반적으로 동일한 상위 클래스를 갖습니다. 팩토리 패턴은 일반적으로 다양한 독립 변수를 기반으로 다양한 클래스의 인스턴스를 반환하는 클래스 생성 패턴입니다.
팩토리 패턴의 핵심은 팩토리 클래스가 수신 매개변수를 기반으로 어떤 제품 인스턴스를 생성해야 하는지 동적으로 결정한다는 것입니다. 팩토리 패턴에는 팩토리 역할, 추상 제품 역할 및 특정 제품 역할이 포함됩니다.
팩토리(Creator) 역할: 팩토리 패턴의 핵심으로 모든 인스턴스를 생성하는 내부 로직을 구현하는 역할을 담당합니다. 필요한 제품 객체를 생성하기 위해 외부 세계에서 팩토리 클래스를 직접 호출할 수 있습니다.
추상 제품(Product) 역할: 팩토리 패턴으로 생성된 모든 객체의 상위 클래스입니다. 모든 인스턴스에 공통적인 공용 인터페이스를 설명하는 역할을 담당합니다.
Concrete Product 역할: 팩토리 패턴의 생성 대상입니다. 모든 객체는 이 역할을 수행하는 특정 클래스의 인스턴스입니다.
ZF의 zend_db는 팩토리 패턴의 좋은 예입니다.
다음에 분석이 시작됩니다. . . . . .
zf를 구성할 때 Bootstrap.php 파일에 데이터베이스 연결 작업 정보를 넣을 수 있습니다.
<?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); } } ?>
항목 파일에서 Bootstrap과 유사한 Zend_Application 객체를 통해 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 : 서버명, 사용자 이름, 비밀번호, 접속할 데이터베이스 등 데이터베이스에 접속하기 위한 정보
먼저 두 가지 질문을 던집니다.
①운영하려는 데이터베이스가 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가 있어야 합니다. 이 클래스는 팩토리 패턴에 의해 생성된 모든 객체의 상위 클래스이며 모든 인스턴스에 공통적인 인터페이스를 제공하는 역할을 담당합니다.
이 클래스는 선택, 업데이트, 삽입, 삭제, 쿼리, fetchRow, fetchAssoc 등 데이터베이스 운영에 매우 익숙한 일부 구현 메서드를 제공할 뿐만 아니라 하위 클래스 구현을 위한 일부 인터페이스도 제공합니다. 예:limit, getServerVersion, closeConnection, explainTable 등
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()가 다양한 매개변수를 기반으로 다양한 데이터베이스를 선택하는 방법을 추적하세요.
Zend Framework의 팩토리 패턴 적용에 대한 더 많은 글은 PHP 중국어 홈페이지를 참고해주세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Dreamweaver Mac版
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

드림위버 CS6
시각적 웹 개발 도구
