首页 > 语言 > PHP > 正文

php设计模式之单例模式使用示例

2024-09-04 11:46:51
字体:
来源:转载
供稿:网友

单例模式也就是只能实例化一次,也就代表在实例化时不可能使用new关键字,下面是使用示例,大家参考使用吧,以下为单例模式代码:

  1. <?php 
  2. class EasyFramework_Easy_Mysql{ 
  3.     protected static $_instance = null; 
  4.     private function __construct(){ 
  5.  
  6.     } 
  7.     public static function getInstance(){ 
  8.         if (self::$_instance === null){ 
  9.             self::$_instance = new self(); 
  10.         } 
  11.         return self::$_instance
  12.     } 
  13.  
  14.     protected function __clone(){ 
  15.  
  16.     } 
  17. //Vevb.com 
  18.  
  19. $x = EasyFramework_Easy_Mysql::getInstance(); 
  20.  
  21. var_dump($x); 
  22.  
  23.  
  24. ?> 

1.第一步:

既然是单例,也就是只能实例化一次,也就代表在实例化时,不可能使用new关键字!!!!

在使用new关键字时,类中的构造函数将自动调用。

但是,如果我们将构造函数的访问控制符设置为protected或private

那么就不可能直接使用new关键字了!!!

第二步:

无论protected/private修饰的属性或方法,请问在当前类的

内部是否可以访问?---> 可以

第三步:

现在我们根本没有办法得到对象(因为你不能使用new关键字了),

第四步:静态成员(包括属性或方法)在访问时,只能通过

类名称::属性()

类名称::方法()

第五步:如果我现在存在一个静态方法--> getInstance()

那么在调用时就应写成

$object = EasyFramework_Easy_Mysql::getInstance()

如果,getInstance()方法可以得到唯一的一个对象

也就代表是所谓的单例模式了!!!

第六步,怎么让getInstace()只得到一个对象呢?

既然要得到对象,那么肯定是:

$variabl = new ????();

我们又知道静态属性的值是可以所有的对象来继承的!!!

静态成员是属于类的,而非对象的!

所以:

第七步:声明一个静态的属性,用其存储实例化的对象

protectd static $_instance

并且初始值为null

那么我在调用getInstance()方法时,只需要判断其值是否为空即可/

  1. public static function getInstance(){ 
  2.      if(self::_instance === null){ 
  3.       self::_instance = new self(); 
  4.   } 
  5.   return self::_instance; 
  6.  } 

在实例时,一定是这样写:

$x = EasyFramework_Easy_Mysql::getInstance();

在第一时调用时,类的$_instance这个静态属性值为null,那么也就代表,getInstance()方法的判断条件为真了,

也就意味着

self::$_instance这个成员有了值了!!!

并且还返回这个值

$y = EasyFramework_Easy_Mysql::getInstance();

在第二次或第N次调用时,self::$_instance已经有了值了

也就代表getInstance()方法的条件为假了!!!

也就代表其中的程序代表不可能执行了!!!

也就代表将直接返回以前的值了!!!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表