手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP中使用虚代理实现延迟加载技术
PHP中使用虚代理实现延迟加载技术
摘要:话说这货是从Martin大神的《企业应用架构模式》中学到的,辅助PHP动态语言的特性,可以比Java轻松很多的实现延迟加载——通过一个虚代理...

话说这货是从 Martin 大神的《企业应用架构模式》中学到的,辅助 PHP 动态语言的特性,可以比 Java 轻松很多的实现延迟加载——通过一个虚代理占位符。唯一的缺陷,是只能代理对象,不能代理内置基本类型。

我试水的 PHP 领域模型设计中,也是用这个来实现 DomainObject 的延迟加载。

复制代码 代码如下:

* 虚代理,只有在被访问成员时才调用闭包函数生成目标对象。

*

* @author tonyseek

*

*/

class VirtualProxy

{

private $holder = null;

private $loader = null;

/**

* 虚代理,只有在被访问成员时才调用闭包函数生成目标对象。

*

* @param Closure $loader 生成被代理对象的闭包函数

*/

public function __construct(Closure $loader)

{

$this->loader = $loader;

}

/**

* 代理成员方法的调用

*

* @param string $method

* @param array $arguments

* @throws BadMethodCallException

* @return mixed

*/

public function __call($method, array $arguments = null)

{

$this->check();

if (!method_exists($this->holder, $method)) {

throw new BadMethodCallException();

}

return call_user_func_array(

array(&$this->holder, $method),

$arguments);

}

/**

* 代理成员属性的读取

*

* @param string $property

* @throws ErrorException

* @return mixed

*/

public function __get($property)

{

$this->check();

if (!isset($this->holder->$property)) {

throw new ErrorException();

}

return $this->holder->$property;

}

/**

* 代理成员属性的赋值

*

* @param string $property

* @param mixed $value

*/

public function __set($property, $value)

{

$this->check();

$this->holder->$property = $value;

}

/**

* 检查是否已经存在被代理对象,不存在则生成。

*/

private function check()

{

if (null == $this->holder) {

$loader = $this->loader;

$this->holder = $loader();

}

}

}

// 测试

$v = new VirtualProxy(function(){

echo 'Now, Loading', "n";

$a = new ArrayObject(range(1,100));

$a->abc = 'a';

// 实际使用中,这里调用的是 DataMapper 的 findXXX 方法

// 返回的是领域对象集合

return $a;

});

// 代理对象直接当作原对象访问

// 而此时构造方法传入的 callback 函数才被调用

// 从而实现加载对象操作的延迟

echo $v->abc . $v->offsetGet(50);

【PHP中使用虚代理实现延迟加载技术】相关文章:

PHP树的代码,可以嵌套任意层

PHP中的事务使用实例

PHP实现多线程的两个方法

Yii实现自动加载类地图的方法

PHP+MYSQL的文章管理系统(一)

PHP使用者状态管理功能的应用

PHP实现远程下载文件到本地

在同一窗体中使用PHP来处理多个提交任务

使用无限生命期Session的方法

php+ajax实现无刷新动态加载数据技术

精品推荐
分类导航