range

If there were you, the world would be just right

应用场景:

  • 数据库连接这种比较耗费资源的操作;
  • 我们希望整个应用只实例化一个;

结构:

  • 4私1公;
  • 私有化构造方法: 防止使用 new 创建多个实例
  • 私有化克隆方法: 防止 clone 多个实例
  • 私有化重建方法: 防止反序列化
  • 私有化静态属性: 存储对象并防止直接访问存储实例的属性
  • 公有化静态方法: 获取对象
    示例
<?php
/**
 * 类
 * Class Db
 */
class Db
{
    private static $instance = null;

    public static function getInstance()
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    private function __construct()
    {
    }

    private function __clone()
    {
    }

    private function __wakeup()
    {
    }

}
$db1 = Db::getInstance();
$db2 = Db::getInstance();


var_dump($db1);
echo '<hr>';
var_dump($db2);

打印结果
QQ截图20181031152418.jpg

普通类DB的句柄每个都是不一样的;
而单例这两个的句柄都是 1,一直是一个实例;