PHP中的延迟加载技术怎么利用虚代理实现

介绍

这篇文章给大家介绍PHP中的延迟加载技术怎么利用虚代理实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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

代码如下:


, *虚代理,只有在被访问成员时才调用闭包函数生成目标对象。
, *
, * @author tonyseek
, *
, */
类VirtualProxy
{
,,,私人美元持有者=零;
,,,私人装载机美元=零;

,,,/* *
,,,,*虚代理,只有在被访问成员时才调用闭包函数生成目标对象。
,,,,*
,,,,* @param关闭美元装载机生成被代理对象的闭包函数
,,,,*/
,,,公共函数__construct(关闭装载机美元)
,,,{
,,,,,,,,,,,$ this→装载机=$装载机;
,,,}

,,,/* *
,,,,*代理成员方法的调用
,,,,*
,,,,* @param字符串$方法
,,,,* @param array 参数
美元,,,,* @throws BadMethodCallException
,,,,* @return混合
,,,,*/
,,,公共函数__call($方法,数组参数=零美元)
,,,{
,,,,,,,,,,,$ this→检查();

,,,,,,,,,,,如果(! method_exists ($ this→持有人,$方法)){
,,,,,,,,,,,,,,,,,,,把新BadMethodCallException ();
,,,,,,,,,,,}

,,,,,,,,,,,返回中的call_user_func_array (
,,,,,,,,,,,,,,,,,,,阵列(和这个→美元持有者,美元方法),
,,,,,,,,,,,,,,,,,,,参数)美元;
,,,}

,,,/* *
,,,,*代理成员属性的读取
,,,,*
,,,,* @param字符串$地产
,,,,* @throws ErrorException
,,,,* @return混合
,,,,*/
,,,公共函数__get(属性)美元
,,,{
,,,,,,,,,,,$ this→检查();

,,,,,,,,,,,如果(!收取($ this→持有人→美元财产)){
,,,,,,,,,,,,,,,,,,,把新ErrorException ();
,,,,,,,,,,,}

,,,,,,,,,,,返回这个→美元持有者→美元财产;
,,,}

,,,/* *
,,,,*代理成员属性的赋值
,,,,*
,,,,* @param字符串$地产
,,,,* @param mixed 美元价值
,,,,*/
,,,公共函数__set(财产,价值美元)
,,,{
,,,,,,,,,,,$ this→检查();

,,,,,,,,,,,这→美元持有者→属性=美元价值;
,,,}

,,,/* *
,,,,*检查是否已经存在被代理对象,不存在则生成。
,,,,*/
,,,私有函数检查()
,,,{
,,,,,,,,,,,如果(null==这→美元持有者){
,,,,,,,,,,,,,,,,,,,装载机=这→美元装载机;
,,,,,,,,,,,,,,,,,,,这→美元持有者=$装载机();
,,,,,,,,,,,}
,,,}
}


//测试
v=美元新VirtualProxy(函数(){
,,,,,,,回声& # 39;加载# 39;现在,“\ n"
,,,一美元=new ArrayObject(范围(1100));
,,,一个美元→abc=& # 39;一个# 39;;
,,,,,,,//实际使用中,这里调用的是DataMapper的findXXX方法
,,,,,,,//返回的是领域对象集合
,,,返回一个美元;
});
//代理对象直接当作原对象访问
//而此时构造方法传入的回调函数才被调用
//从而实现加载对象操作的延迟
echo $ v→abc。null

PHP中的延迟加载技术怎么利用虚代理实现