phalapi可以依赖注入么_DI依赖注入和单例模式.pdf

DI依赖注入和单例模式

DI依赖注⼊和单例模式

PHALAPI-进阶篇2(DI依赖注⼊和单例模式)

前⾔

先在这⾥感谢phalapi框架创始⼈@dogstar,为我们提供了这 ⼀个优秀的开源框架.

离上⼀次更新过去了快两周,在其中编写了⼀个关于DB分表分库解决⼤数据量的拓 ,

有兴趣的童鞋可以了解了解.废话不多说,本⼩节在于解释⼀下在PhalApi框架中两个⽐

较好的思想,单例模式和依赖注⼊.

附上:

喵了个咪的博客:

官⽹地址:/

开源中国Git地址:/dogstar/PhalApi/tree/release

1. 单例模式

单例模式对于长期进⾏过⾯向对象编程的童鞋应该不算陌⽣,对学习php的童鞋也应该

有听过,这⾥简单的聊⼀聊单例模式它到底是⼀个怎么样的东东,解决了怎么样的问题,

并且在PhalApi中它是如何实现的.

单例单例,所谓单例也就是保证⼀个类仅有⼀个实例,并提供⼀个访问它的全局访问

点,这就是单例,不难看出他的好处:资源利⽤少,因为只有⼀个,⼤家都是知道要使⽤

⼀个类必须要实例他,也就是new,在每次new⼀个对象的时候都会在内存中⽣成⼀块

区域来存放这个实例,如果在程序⼀次运⾏中使⽤了很多的new实例化了同⼀个对象,那

就⽐较消耗资源了,但是如果是通⽤⼀个使⽤全局变量global程序又会显得不那么优雅

⽽且会很乱,在这种情况下,单例模式就产⽣了.

单例模式是⼀个很好的解决⽅案,既可以全局通⽤,又不必担⼼占⽤过多的资源,且⾮

常优雅。我们来⼀起看看在PhalApi中是如何实现单例模式的:

//⼤家看到我们常⽤的DI⽅法内部实现的是PhalApi_DI中的静态⽅法one⽅法

function DI() {

return PhalApi_DI::one();

}

然后我们看向one⽅法内部

每当请求过来时先验证静态变量instance是否已被类初始化赋值,若⽆,则会在内部去

实例化PhalApi_DI类,然后赋值给$instance并返回,若有,则当下次请求过来时,直接

返回已实例化的对象。简⾔之,PhalApi框架所有的地⽅使⽤的DI⽅法,其实都是返回

同⼀个对象实例,在内存中只存在⼀块区域,代码如下:

public static function one(){

if(self::$instance == N LL){

self::$instance = new PhalApi_DI();

self::$instance->onConstruct();

}

return self::$instance;

}

2. 依赖注⼊

依赖注⼊又称之为"控制反转",如果是熟悉javaweb开发的spring框架应该有⽐较深的

感触,在这⾥也不往深的讲,就简单讲解⼀下PhalApi中DI依赖注⼊的实现,以便让⼤家

了解这种设计模式实现原理以及⾃此基础上实现的惰性加载机制.

2.1 DI依赖注⼊实现

⼤家在PhalApi中常⽤的DI()⽅法,也就是采⽤我们上⾯所谓的单例模式,我们每次使⽤

DI()就是在使⽤PhalApi_DI类,其实我们依赖注⼊的关键也就是在PhalApi DI之中

先来讲⼀下他的⼀个实现⽅式再来讲具体实现,这⾥举个例⼦:

//配置

DI()->config = new PhalApi_Config_File(API_ROOT . '/Config');

其实在内部有⼀个数组,它把config作为了key,把ne PhalApi_Config_File(API_ROOT

. '/Config')作为了value,然后保存了起来。当我们下⼀次使⽤DI->config->get()的时

候,它就会根据key值config拿出开始new好的类,所以可以说config操作是依赖于DI() ,

⽽且在使⽤DI()->config的时候永远都是在使⽤同⼀个实例,减少资源的消耗.

有的童鞋就好奇了为什么DI()->config会存到数组⾥⽽在需要的时候会拿出来?感兴趣

的童鞋可以百度⼀下魔法⽅法set和get

/**⼤家可以看到这是PhalApi_DI中的魔法⽅法__set

* 也就是当使⽤DI()->config = new PhalApi_Config_File(API_ROOT . '/

* 得的name值就是config, 得的value也就是new PhalApi_Config_File(AP

*/get同理,在内部实现都是调⽤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值