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);