PHP开发模式之代理技术
在实际开发中,我们经常要调用第三方的类库如SOAP服务等。使用这些第三方 组件并不难,最麻烦的莫过于调用了,一般的调试手段最方便的莫过于记日志了。 示例: 假如有以下第三方类库。
// filename: user.phpclass user{ // 得到用户信息 public function getInfo($uid){ }} |
一般的程序员写的调用代码可能是: include 'user.php'; $face = new user(); $uid = 100; // 参数写日志 $info = $face->getInfo($uid); // 返回的结果再写日志 这里有个问题,如果要用到第三方接口很多,则这种方式将是一个恶梦的开始; 这里我采用一种Proxy代理方式,在 Ruby 语言中有一个非常专业 的名词AOP可以形容这种技术,即动态的为类增强方法。
// 代理技术class VProxy{ // 单例,如果在复杂资源时比较有用,如SOAP/DB等 static private $_instance = array(); /** * 单例模式返回实现(推荐) * * @param string $model 接口模型名 * @return object */ static public function getInstance($model) { $model = strtolower($model); if(!isset(self::$_instance[$model])){ self::$_instance[$model] = new self($model); } return self::$_instance[$model]; } /** * 当前调用接口的实例 * * @var unknown_type */ private $_model = null; private $_modelName = ''; /** * 构造函数 * * @param string $model 接口模型名 */ public function __construct($model){ include_once($model.'.php'); $this->_modelName = $model; $this->_model = new $model; } /** * proxy核心方法 * * @param string $functionName :方法名 * @param mixed $args :传给方法的参数 * @return unknown */ public function __call($functionName,$args) { // 调用接口 $result = call_user_func_array(array($this->_model, $functionName), $args)); // 写日志 writeLog($this->_modelName,$functionName,$args,$result); // 返回结果 return $result; }} // 调用实例$face = VProxy::getInstance('user');$info = $face->getInfo(100); |
该实例子只是起个画龙点睛而以,具体实现应用比这种复杂,利用以上技术还可以为接口增加相关的方法, 这点就类似Javascript中对象的特性了,具体自己尝试下吧!我在迅雷具体项目中经常用到该技术, 比如说为部门提供公共服务接口等。
转自:http://www.vquickphp.com/?a=blogview&id=25
PHP开发模式之代理技术的更多相关文章
- 代理模式 & Java原生动态代理技术 & CGLib动态代理技术
第一部分.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常 ...
- 《JavaScript设计模式与开发实践》-- 代理模式
详情个人博客:https://shengchangwei.github.io/js-shejimoshi-daili/ 代理模式 1.定义 代理模式:代理模式是为一个对象提供一个代用品或占位符,以便控 ...
- 企业应用开发模式 ERP项目中应用到的技术和工具
一.基础技术选型 C# .NET 3.5/4.0 这两个版本的.NET已经相当方便(Linq, Lambda,Parallel),语法简洁,配合WCF和WF两项技术,可以满足快速开发,维护方便的目标 ...
- MyBatis之代理开发模式
1 mybatis-Dao的代理开发模式 Dao:数据访问对象 原来:定义dao接口,在定义dao的实现类 dao的代理开发模式 只需要定义dao接口,由mybatis产生dao接口的实现类. 1.1 ...
- 动态页面技术----EL技术、JSTL技术,javaEE的开发模式
1 EL技术 1.1 EL 表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写, EL出现的目的是要替代jsp页面中脚本的编写,就是简化java代码. ...
- jsp基础、el技术、jstl标签、javaEE的开发模式
一.jsp技术基础 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ...
- java 开发模式
Java-开发模式 Java Web开发方案有多种,这里列举一些经典的开发模式进行横向比较JSP+JAVABEAN开发模式: 特点:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可 ...
- Java开发web的几种开发模式
Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket等等)并不了解,这里就不 ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
随机推荐
- 认识angualrJS的resource服务
这段时间公司有个项目要用到angularJS,于是就在网上开始各种找学习资料. 一开始下了一本<angularJS权威教程>,看了10章,实在看不下去了,只能说这本书对于才接触javasc ...
- 10 Common Problems Causing Group Policy To Not Apply
10 Common Problems Causing Group Policy To Not Apply Group Policy is a solid tool and is very stable ...
- [转]C#创建Windows服务与安装
本文档用于创建windows服务说明,使用vs2010系统平台 创建项目 1 创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart ...
- 【AT91SAM3S】建立基于SAM3S库的工程并点亮LED
习惯了ST的库,猛然间看到ATMEL的库,有点无从下手.这几天参考这示例工程,终于建立了一个使用ATMEl库的工程. 软件库版本: 软件平台:MDK470A 硬件平台:英蓓特 EB-SAM3S MCU ...
- MapReduce单表关联学习~
首先考虑表的自连接,其次是列的设置,最后是结果的整理. 文件内容: import org.apache.hadoop.conf.Configuration; import org.apache.had ...
- JS运动从入门到精髓!哈哈
首先来看最基础的运动:单个物体向右匀速运动到某一点停止 例子:一个按钮,一个div,点击按钮,让div向右运动到某一个位置暂停 // 原理: 1 获取物体当前的位置 oDiv.offsetl ...
- src与href属性的区别
src和href之间存在区别,能混淆使用.src用于替换当前元素,href用于在当前文档和引用资源之间确立联系. src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在 ...
- Sublime Text对Python代码加注释的快捷键
一直在Coursera上补基础课,发现很多课程都用Python作为教学语言,学了一下感觉果然好,简直是用英语在写代码.(我建Python目录的时候发现去年学过一点点Python,居然一点都不记得了= ...
- link
public IEnumerable InsuranceSearch(InsuranceSC sc, out int TotalCount) { var data = from q in Insura ...
- [转载:]Fortran 二进制文件读写
一些朋友总是咨询关于二进制文件的读写和转化.这里就我自己的理解说一说. 一).一般问题 二进制文件与我们通常使用的文本文件储存方式有根本的不同.这样的不同很难用言语表达,自己亲自看一看,理解起来会容易 ...