针对php面向对象中的单例模式总结

  

单例模式思路总结:

  1. 保护或私有构造函数,防止外部实例化。
  2. 类内部放一个公共的静态方法,负责实例化。
  3. 类有一个静态属性,储存对象。
  4. 当静态属性已经有一个对象,直接return回去。

先看场景:

多人协同开发, 都要调用mysql类的实例! 如果用svn知道,好多人一起开发,再提交各自的文件.

  A:

$mysql = new mysql();

$mysql->query....

测试通过

B:

$db = new mysql();

测试通过

...

...

两人的代码要合到一块,如下

  $mysql = new mysql();

$mysql->query....

$db = new mysql();

两个mysql类的实例,

而且,每new一下,还要连接一次数据库.

显然,一个页面呢,有一个mysql类的实例就够了.

如果限制,让多人开发,无论你怎么操作,只能得到一个对象呢?

  1:开会时,经理说:有一个$db变量,是系统自动初始化的,就是mysql类的实例.

大家都用他.谁敢new mysql(),开除.

2:这是行政手段,不能阻止技术上的new mysql()行为.

我们可以从技术上,用单例模式来解决

注:单例常用也常考,请认真练习

  第一步:一个普通的类

这个普通类,可以new 来实例化

这显然不是单例

  第二步:看来new是罪恶之源,干脆不让new了

我们把构造方法 保护/私有

外部不能new了

--但引出一个问题,不能new,那得不到对象,这不是单例,这是0例模式

  第三部,通过内部的static方法,来调用

  第四步,通过内部的static方法实例化,

并且,把实例保存在类内部的静态属性上

  看问题


针对php面向对象中的单例模式总结

05.php

 

weinxin
我的微信
把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
avatar

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: