保证一个类仅有一个实例,并提供一个访问它的全局访问点.
应用场景:
A.一个无状态的类使用单例,可以节省内存
B.全局或配置类(其实这个也是无状态的)
C.脚本或程序从运行开始到结束,仅需要一个实例来保证数据或条件的一致性(数据库连接,如user类的积分数据),注意这是在单线程模式下,多线程模式下是要处理并发
UML:
class A{ private static $instance = null; private function __contruct(){} public static getInstance() { if (is_null(self::$instance)) { self::$instance = new static(); //此处注意和new self的区别 } return self::$instance; } } 调用: $a = A::getInstance(); $a->getInstance();