PHP 单例模式

69 阅读1分钟

概念

单例模式: 一个类只能实例化一次, 当其再次实例化时, 返回第一次实例化的对象, 可以节省资源

应用场景

DB类、Cache类、配置类等的实例化

实现(三私一公)

  • 私有的构造方法 (限制只能类内部实例化, 防止类外部实例化)
  • 私有的克隆方法 (防止通过克隆生成对象)
  • 私有的静态属性 (保存类的实例)
  • 公有的静态方法(提供实例, 实例化前先判断该类是否已经被实例化, 若是则返回实例化对象, 若不是则实例化对象并将该对象保存在类的静态属性中)
<?php

class Single
{
    private static $instance;

    private function __clone() {}

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === NULL) self::$instance = new self();
        return self::$instance;
    }
}

$obj1 = Single::getInstance();
$obj2 = Single::getInstance();

// 用 === 可以判断两个变量是否指向同一个对象
var_dump($obj1 === $obj2);//true