Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176046
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 337
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 15:51
文章分类

全部博文(49)

文章存档

2014年(23)

2013年(26)

我的朋友

分类: PHP

2014-03-02 21:26:41

(php设计模式 )单例模式也就是只能实例化一次,也就代表在实例化时不可能使用new关键字。

(php单例模式 )代码:

  1. <?php
  2. class EasyFramework_Easy_Mysql{
  3.     protected static $_instance = null;
  4.     private function __construct(){


  5.     }
  6.     public static function getInstance(){
  7.         if (self::$_instance === null){
  8.             self::$_instance = new self();
  9.         }
  10.         return self::$_instance;
  11.     }


  12.     protected function __clone(){


  13.     }


  14. }
  15. $x = EasyFramework_Easy_Mysql::getInstance();
  16. var_dump($x);


  17. ?>


  18. /*
  19.  * 1.第一步:
  20.  * 既然是单例,也就是只能实例化一次,也就代表在实例化时
  21.  * 不可能使用new关键字!!!!
  22.  * 在使用new关键字时,类中的构造函数将自动调用。
  23.  * 但是,如果我们将构造函数的访问控制符设置为protected或private
  24.  * 那么就不可能直接使用new关键字了!!!
  25.  * 第二步:
  26.  * 无论protected/private修饰的属性或方法,请问在当前类的
  27.  * 内部是否可以访问?---> 可以
  28.  * 第三步:
  29.  * 现在我们根本没有办法得到对象(因为你不能使用new关键字了),
  30.  * 第四步:静态成员(包括属性或方法)在访问时,只能通过
  31.  * 类名称::属性()
  32.  * 类名称::方法()
  33.  * 第五步:如果我现在存在一个静态方法--> getInstance()
  34.  * 那么在调用时就应写成
  35.  * $object = EasyFramework_Easy_Mysql::getInstance()
  36.  * 如果,getInstance()方法可以得到唯一的一个对象
  37.  * 也就代表是所谓的单例模式了!!!
  38.  * 第六步,怎么让getInstace()只得到一个对象呢?
  39.  * 既然要得到对象,那么肯定是:
  40.  * $variabl = new ????();
  41.  * 我们又知道静态属性的值是可以所有的对象来继承的!!!
  42.  * 静态成员是属于类的,而非对象的!
  43.  * 所以:
  44.  * 第七步:声明一个静态的属性,用其存储实例化的对象
  45.  * protectd static $_instance
  46.  *
  47.  * 并且初始值为null
  48.  * 那么我在调用getInstance()方法时,只需要判断其值是否为空即可\
  49.  *
  50.  * public static function getInstance(){
  51.  * if(self::_instance === null){
  52.  * self::_instance = new self();
  53.  * }
  54.  * return self::_instance;
  55.  * }
  56.  * 在实例时,一定是这样写:
  57.  * $x = EasyFramework_Easy_Mysql::getInstance();
  58.  * 在第一时调用时,类的$_instance这个静态属性值为null,
  59.  * 那么也就代表,getInstance()方法的判断条件为真了,
  60.  * 也就意味着
  61.  * self::$_instance这个成员有了值了!!!
  62.  * 并且还返回这个值
  63.  * $y = EasyFramework_Easy_Mysql::getInstance();
  64.  * 在第二次或第N次调用时,self::$_instance已经有了值了
  65.  * 也就代表getInstance()方法的条件为假了!!!
  66.  * 也就代表其中的程序代表不可能执行了!!!
  67.  * 也就代表将直接返回以前的值了!!!
  68.  *
  69.  *
  70.  *
  71.  * */
阅读(1074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~