PHP_单例模式、实例代码

在PHP中实例化一个对象,就会新开辟一个新内存空间,当一些业务要实例化多个对象时,会占用大量内存。这个问题可以用单例模式解决。

我们实例化对象可以直接new出来,也可以通过类中的构造函数  __construct 、析构函数 __destruct、克隆__clone来实现,我们可以将这3个函数私有化,不让外部这样实例化对象;然后设置一个公共静态方法,通过类名调用。这是“三私一公”。

 

具体代码如下:

 1 <?php
 2 
 3 //先创建一个类,后面调用
 4 class A {
 5 
 6 }
 7 
 8 //创建单例类
 9 class One{
10     //设置一个私有静态的属性,用于保存对象
11     private static $obj;
12 
13     //将构造方法私有化
14     private function __construct(){
15     }
16 
17     //创建一个公共的静态方法,静态方法是为了直接通过类名调用
18     static function getObj($className){
19         /**
20          * instanceof   看一个对象是否属于这个类
21          *如果实例化的对象属于这个类
22          */
23         if(self::$obj instanceof $className){
24             //就把这个对象返回
25             return self::$obj;
26         }else{
27             //如果否,就实例化这个对象再返回
28             self::$obj = new $className;
29             return self::$obj;
30         } 
31     }
32 
33     //将克隆私有化
34     private function __clone(){
35     }
36 }
37 
38     //测试
39     //无论实例化多少次类A,都只会得到一个对象
40     $one1 = One::getObj('A');
41     $one2 = One::getObj('A');
42     $one3 = One::getObj('A');
43     var_dump($one1);
44     var_dump($one2);
45     var_dump($one3);

 

posted @ 2017-08-03 14:47  bk233  阅读(389)  评论(0编辑  收藏  举报