单例模式是一种常见的设计模式
在实际的运用中,存在一些类,只需要实例化一个对象,就可以完成其所有的功能操作,最典型的就是数据库操作。
所以,如果我们能够通过某些技巧,使得一个类只能开辟一个对象空间的话,就可以节省相应的对象资源,这种模式就叫作单例模式。
第一步:防止用户通过new关键字无限实例化对象
通过new关键字实例化一个新对象的时候,系统会触发构造方法的自动执行,所以,我们私有化构造方法
第二步:增加一个静态的公开方法,进入类的内部
第三步:为当前类增加一个私有的静态属性
但是,此时,用户还可以通过克隆来得到一个新的对象空间!
解决方案:
第四步:私有化__clone方法
/** * 单例模式 */ class Student { // 增加静态的私有属性 private static $instance;//保存一个当前类的对象 private function __construct() { } /** * 静态的公开方法,得到当前类的对象 */ public static function getInstance() { // 判断当前对象是否已经存在 if(!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } private function __clone() { } } $stu1 = Student::getInstance(); $stu2 = Student::getInstance(); echo '<pre>'; var_dump($stu1, $stu2);