正文 1061字数 48,771阅读

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

我们实例化对象可以直接new出来,也可以通过类中的构造函数 __construct 、析构函数 __destruct、克隆__clone来实现,我们可以将这3个函数私有化,不让外部这样实例化对象;然后设置一个公共静态方法,通过类名调用。这是“三私一公”。
<?php //先创建一个类,后面调用 class A { } //创建单例类 class One{ //设置一个私有静态的属性,用于保存对象 private static $obj; //将构造方法私有化 private function __construct(){ } //创建一个公共的静态方法,静态方法是为了直接通过类名调用 static function getObj($className){ /** * instanceof 看一个对象是否属于这个类 *如果实例化的对象属于这个类 */ if(self::$obj instanceof $className){ //就把这个对象返回 return self::$obj; }else{ //如果否,就实例化这个对象再返回 self::$obj = new $className; return self::$obj; } } //将克隆私有化 private function __clone(){ } } //测试 //无论实例化多少次类A,都只会得到一个对象 $one1 = One::getObj('A'); $one2 = One::getObj('A'); $one3 = One::getObj('A'); var_dump($one1); var_dump($one2); var_dump($one3);
Run code
Cut to clipboard