仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1214|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:php中经由过程虚代办署理完成延迟加载的完成代码...

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:36:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。   这货是从 Martin 大神的《企业使用架构形式》中学到的,帮助 PHP 静态言语的特征,可以比 Java 轻松良多的完成延迟加载(LazyLoad)。根基道理是经由过程一个虚代办署理(Virtual Proxy)做占位符,一旦会见代办署理对象的某成员(办法或属性),加载就被触发。

不外我完成的这个版本有局限性:

只合用于对象,没法代办署理数组等根基数据类型(需求用 ArrayObject 一类的内置对象封装)
被代办署理以后,一些带有操作符重载性质的接话柄现就生效了,例如 ArrayAccess 的索引器、Itreator 的迭代器,假如是用该代办署理来处置纠合类型的延迟加载,还需求承继一个子类做特别处置,以便内部用 foreach 迭代
demo
复制代码 代码以下:
// 测试
$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);

Virtual Proxy
复制代码 代码以下:
/**
* 虚代办署理,只要在被会见成员时才挪用闭包函数生成方针对象。
*
* @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();
}
}
}
可以在书上很方便地做标记,及时记下自己的心得体会。
莫相离 该用户已被删除
沙发
发表于 2015-2-4 03:46:11 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
再现理想 该用户已被删除
板凳
发表于 2015-2-5 12:45:28 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
乐观 该用户已被删除
地板
发表于 2015-2-6 20:46:40 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
不帅 该用户已被删除
5#
发表于 2015-2-18 09:00:30 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
蒙在股里 该用户已被删除
6#
发表于 2015-2-27 05:39:02 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
只想知道 该用户已被删除
7#
发表于 2015-3-6 05:20:01 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
简单生活 该用户已被删除
8#
发表于 2015-3-11 10:58:58 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-12 03:00:22 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
爱飞 该用户已被删除
10#
发表于 2015-3-13 00:09:45 | 只看该作者
当然这种网站的会员费就几十块钱。
深爱那片海 该用户已被删除
11#
发表于 2015-3-17 00:10:25 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
12#
发表于 2015-3-17 06:40:10 | 只看该作者
爱上php,他也会爱上你。
精灵巫婆 该用户已被删除
13#
发表于 2015-3-23 23:56:59 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
金色的骷髅 该用户已被删除
14#
发表于 2015-3-25 21:47:47 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
小女巫 该用户已被删除
15#
发表于 2015-4-2 10:34:03 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
因胸联盟 该用户已被删除
16#
发表于 2015-4-7 02:27:15 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
老尸 该用户已被删除
17#
发表于 2015-4-9 14:12:00 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
透明 该用户已被删除
18#
发表于 2015-4-11 15:24:19 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
柔情似水 该用户已被删除
19#
发表于 2015-4-16 14:19:26 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
谁可相欹 该用户已被删除
20#
发表于 2015-4-17 08:01:11 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 12:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表