服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP 工厂模式使用方法

PHP 工厂模式使用方法

2019-10-30 16:26php教程网 PHP教程

工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。

基本的工厂类 

复制代码代码如下:


class MyObject{ 
//对象将从工厂返回 

class MyFactory{ 
public static function factory(){ 
return new MyObject(): 


$instance=MyFactory::factory(); 


使用工厂类解析图像文件 

复制代码代码如下:


<?php 
interface IImage{ 
function getHeight(); 
function getWidth(); 
function getData(); 

class Image_PNG implements IImage{ 
private $_width,$_height,$_data; 
public function __construct($file){ 
$this->_file=$file; 
$this->_parse(); 

private function _parse(){ 
//完成PNG格式的解析工作 
//并填充$_width,$_height,$_data; 

public function getWidth(){ 
return $this->_width; 

public function getHeight(){ 
return $this->_height; 

public function getData(){ 
return $this->_data; 


class Image_JPEG implements IImage{ 
private $_width,$_height,$_data; 
public function __construct($file){ 
$this->_file=$file; 
$this->_parse(); 

private function _parse(){ 
//完成JPEG格式的解析工作 
//并填充$_width,$_height,$_data; 

public function getWidth(){ 
return $this->_width; 

public function getHeight(){ 
return $this->_height; 

public function getData(){ 
return $this->_data; 


class ImageFactory{ 
public static function factory($file){ 
$pathParts=pathinfo($file); 
switch (strtolower($pathParts['extension'])) 

case 'jpg': 
$ret=new Image_JPEG($file); 
break; 
case 'png': 
$ret=new Image_PNG($file); 
break; 
default: 
//有问题 

if($ret instanceof IImage){ 
return $ret; 
}else { 
//有问题 



//当使用图像文件名调用 工厂方法时,根据传入的文件类型不同,取得不同对象。 
//调用ImageFactoyr 
$image=ImageFactory::factory('/path/to/my.jpg'); 
//$image是Image_JPEG类的一个实例 
echo $image->getWidth(); 


使用工厂类解决数据库可移值性问题 
在数据库应用程序中,工厂模式可以在以下两个方面起作用。 
.使软件更容易支持各种不同的数据库平台,用于扩展用户群 
.如果软件是内部使用,需要修改数据库时,可以容易将应用程序移值到别一个平台 
在代码中,创建了一个名为User的数据库表来测试它,这个表定义一个名为email的varchar类型字段 

复制代码代码如下:


<?php 
interface IDatabaseBindings{ 
public function userExists($email); 

class PGSQL implements IDatabaseBindings{ 
protected $_connection; 
public function __construct(){ 
$this->_connection=pg_connect('dbname=example_db'); 

public function userExists($email){ 
$emailEscaped=pg_escape_string($email); 
$query="select 1 from users where email='".$emailEscaped."'"; 
if($result=pg_query($query,$this->_connection)){ 
return (pg_num_rows($result)>0)?true:false; 
}else{ 
return false; 



class MYSQL implements IDatabaseBindings{ 
protected $_connection; 
public function __construct(){ 
$this->_connection=mysql_connect('localhost'); 
mysql_select_db('example_db',$this->_connection); 

public function userExists($email){ 
$emailEscaped=mysql_real_escape_string($email); 
$query="select 1 from users where email='".$emailEscaped."'"; 
if($result=mysql_query($query,$this->_connection)){ 
return (mysql_num_rows($result)>0)?true:false; 
}else{ 
return false; 



class DatabaseFactory{ 
public static function factory(){ 
$type=loadtypefromconfigfile(); 
switch ($type){ 
case 'PGSQL': 
return new PGSQL(); 
break; 
case 'MYSQL': 
return new MYSQL(); 
break; 



应用程序不必知道它与何种类型的数据库连接,只会基于IDatabaseBindings接口定义的规则直接与工厂返回的实例打交道。 

复制代码代码如下:


//调用DatabaseFactoy 
$db=DatabaseFactory::factory(); 
$db->userExists('person@example.com'); 

延伸 · 阅读

精彩推荐
  • PHP教程php实现的mongoDB单例模式操作类

    php实现的mongoDB单例模式操作类

    这篇文章主要介绍了php实现的mongoDB单例模式操作类,结合实例形式分析了php基于单例模式操作MongoDB数据库的数据库封装类相关实现技巧,需要的朋友可以参考...

    人生如梦,梦如人生3722019-10-25
  • PHP教程PHP实现小程序批量通知推送

    PHP实现小程序批量通知推送

    这篇文章主要为大家详细介绍了PHP实现小程序批量通知推送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    孙智斌2512019-08-16
  • PHP教程php微信公众号开发之简答题

    php微信公众号开发之简答题

    这篇文章主要为大家详细介绍了php微信公众号开发之简答题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    dq_0953192019-08-31
  • PHP教程Yii2框架类自动加载机制实例分析

    Yii2框架类自动加载机制实例分析

    这篇文章主要介绍了Yii2框架类自动加载机制,结合实例形式分析了Yii框架类自动加载机制的原理与实现方法,需要的朋友可以参考下 ...

    编程人,在天涯4302019-10-09
  • PHP教程PHP的PDO预处理语句与存储过程

    PHP的PDO预处理语句与存储过程

    今天小编就为大家分享一篇关于PHP的PDO预处理语句与存储过程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    php参考手册2342019-06-27
  • PHP教程php5.5使用PHPMailer-5.2发送邮件的完整步骤

    php5.5使用PHPMailer-5.2发送邮件的完整步骤

    PHPMailer已经更新了很多版本了,本教程只针对老版本。下面这篇文章主要给大家介绍了关于php5.5使用PHPMailer-5.2发送邮件的完整步骤,文中通过示例代码介绍...

    Ryan.Miao1682019-09-02
  • PHP教程PHP实现断点续传乱序合并文件的方法

    PHP实现断点续传乱序合并文件的方法

    这篇文章主要介绍了PHP实现断点续传乱序合并文件的方法,涉及php文件读写、传输、排序等相关操作技巧,需要的朋友可以参考下...

    luyaran5082019-09-08
  • PHP教程Gregarius中文日期格式问题解决办法

    Gregarius中文日期格式问题解决办法

    Gregarius支持中文的程度很不错,唯一的缺陷就是在日期格式上会出现乱码。其实只要修改根目录下util.php文件的rss_locale_date方法就可以解决这个问题,希望...

    php教程网3562019-10-29