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