RSS
热门关键字:  php  lighttpd  找回密码  密码找回  client
当前位置 :| 主页>技术资料>PHP>

PHP适配器模式编程学习

来源: 作者: 时间:2008-08-08 Tag:php   适配器   点击:
PHP设计模式已经提出来很久了,一直没有仔细研究,以前只看过单件模式,由于工作需要,这两天研究了一下适配器模式,看网上教程很少,写出来和大家分享.
适配器是什么?
适配器(Adapter)模式为对象提供了一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常见接口,同时避免了因升级和拆解客户代码所引起的纠纷。举个例子:PHP连接数据库,数据库可能为MYSQL也可能为SQL SERVER 还可能为SQLLITE,ORCALE等等,怎样写一个通用的调用接口来连这些数据库以应对如果我们要更换不同的数据库的话,我们不需要大篇幅更改程序,可能我们只要改一行就OK了.
因为是用ZendFramework做MVC开发,所以就做一个扩展就好了.
1.建一个Custom的目录,目录结构如下
Custom 一级目录
—Provider 二级目录
—–Adapter 三级目录
——–Abstract.php
——–Example1.php
——–Example2.php
——–Example3.php
—–Exception.php
—–Provider.php
2.首先介绍Provider.php这个文件为接口的入口
下载: Provider.php
复制PHP内容到剪贴板
PHP代码:

<?php
/**
* @see Zend_Loader
*/
require_once 'Zend/Loader.php';
class 
Custom_Provider
{
public static function 
factory($providername)
{
  
//设定适配器默认路径
  
$adapterNamespace 'Custom_Provider_Adapter';
  
  
//根据参数得到准备路径
  
$adapterName strtolower($adapterNamespace '_' $providername);
  
  
//ucwords 将单词首字母转换大写
        
$adapterName str_replace(' ''_'ucwords(str_replace('_'' '$adapterName)));
        
//加载文件
  
Zend_Loader::loadClass($adapterName);
  
//新建实例
  
$piAdapter = new $adapterName();
  
//安全验证 
  
if (! $piAdapter instanceof Custom_Provider_Adapter_Abstract) {
            require_once 
'Custom/Provider/Exception.php';
            throw new 
Custom_Provider_Exception("Adapter class '$adapterName' does not extend Custom_Provider_Adapter_Abstract");
        }
  return 
$piAdapter;
}
}


这个文件通过调用factory方法,得到真正要使用的类并实例化,把对象返回

3.接下来是Exception.php这是一个异常类,只需要继承Zend_Exception就可以了
下载: Exception.php

    复制PHP内容到剪贴板
    PHP代码:

    <?php/**
    * Custom_Provider_Exception
    */
    require_once 'Zend/Exception.php';class Custom_Provider_Exception extends Zend_Exception
    {
    }


    4.接下来是Abstract.php这是一个抽象类,为各个Example抽象公用的方法名,如果各个example为不同实现过程的就可以定为抽象类,在子类实现声明
    下载: Abstract.php
复制PHP内容到剪贴板
PHP代码:

<?php
/**
* @see Zend_Loader
*/
require_once 'Zend/Loader.php';
abstract class 
Custom_Provider_Adapter_Abstract
{
function 
__construct()
{
  
}

function 
abc()
{
  echo 
"abc";
  
}

abstract function 
httpPost();

abstract function 
getResult();
}


5.接下来是Example1.php这是一个私有类,每个Example有不同的处理过程,但有相同的方法名,同时都继承自Abstract.php类
下载: Example1.php
复制PHP内容到剪贴板
PHP代码:

<?php
/**
* @see Zend_Loader
*/
require_once 'Zend/Loader.php';
class 
Custom_Provider_Adapter_Example1 extends Custom_Provider_Adapter_Abstract 
{
function 
httpPost()
{
  echo 
"example1 post";
}

function 
getResult()
{
  echo 
"example1 Result";
}
}


另外两个Example文件和这个差不多,就不写出来了.
6.最后给一个调用的例子
下载: IndexController.php

    复制PHP内容到剪贴板
    PHP代码:

    <?php
    class IndexController extends Zend_Controller_Action 
    {
      function 
    indexAction()
      {
        
    $pi Custom_Provider::factory('example1');
         
    $pi->abc();
         echo 
    "<br>";
         
    $pi->httpPost();
         echo 
    "<br>";
         
    $pi->getResult();
      }
    }



    到这里一个简单的适配器最完成了.这样可以减少代码的冗余,建立统一入口.对代码的升级等也很有好处.

    可到http://www.php126.com/?p=472 下载
    免费内容:

    PHP易网-接建站外包.zendframework框架开发

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册