单例模式

复制代码
 1 //单例模式
 2 //目的:为了控制对象的数量(只能够有一个,相当于类的计划生育)
 3 //针对场景给用户在这个场景里只能造出一个对象,不能多个例如DW窗口在一个页面只能开一个窗口
 4 
 5 //类
 6 class Ren
 7 {
 8      public $name;//成员变量 跟名字
 9      //(图2)成员变量用来储存对象
10      static public $dx;//(如图3)判断这个变量是不是空的
11      
12      private function __construct()//private私有的在外界访问不到,也就是不能造对象了
13      {
14          
15      }
16      //方法
17      static function DuiXiang()//早对象的方法,返回有个对象
18      {    
19          if(empty(self::$dx))//(图3)
20          {
21             self::$dx = new Ren();//(这个等于图4)
22         }
23         return self::$dx;//这样就能控制有一个对象$dx不能这样写必须用个关键字self::$dx调用
24          //(图4)return new Ren();//返回的对象
25      }//现在钓不到,如何让它钓到加静态方法如下用类名钓对象方法(例子1加了return还是实现不了只能造一个出来。解决方案根据封装想到加控制条件)让对象只能造一个出来,在这个大类里再做一个变量用来储存该对象(如图2)将来要放在这个方法里面使用的,应为这个是一个静态方法静态方法只能方静态的所以上面(图2)只能做静态的才能访问
26      
27 }
28 //使用类就要用到Ren类里面的对象方法
29 $r = Ren::DuiXiang();
30 $r->name = "张三";//对象里面name赋值如张三。如果在用这个类如(图5)
31 
32 $r1 = Ren::DuiXiang();//(图5)也显示张三,如果把$r1值改成李四那么$r也会变李四
33 $r1->name = "李四";//这个值就会显示李四
34 
35 var_dump($r1);//看看r1这个对象是不是使用过的r这个对象
36 
37 /*//(例子1)     
38 $r = Ren::DuiXiang();
39 var_dump($r);
40 */
41      
42     
43 
44 下面的先不看捋顺再看
45 //$r = new Ren();//构造函数变成私有的,但是这样在外界一个对象都做不了。要解决在这可以造一个对象,那就是做个方法相当于封装
46 
47 
48 //对象
49 /*$r = new Ren();//new调用构造函数Ren()
50 $r->name = "张三";
51 
52 $r1 = new Ren();
53 $r1->name = "李四";
54 */
55 
56 


复制代码
原文地址:https://www.cnblogs.com/xieyulin/p/7070343.html