PHP-单例模式

240 阅读1分钟

什么是单例模式

单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

此概念引用于菜鸟教程-单例模式: www.runoob.com/design-patt…

单例模式的实现

<?php

class Database
{
    /**
     * @var Database
     */
    private static $db;

    /**
     * 将构造方法设为私有,不允许new
     * Database constructor.
     */
    private function __construct()
    {

    }

    /**
     * 单例模式
     * @return Database
     */
    public static function getInstance (): \Database
    {
        // 判断是否存在该变量
        if (!self::$db) {
            self::$db = new self();
        }

        return self::$db;
    }
}

$db = Database::getInstance();
$db1 = Database::getInstance();
var_dump($db, $db1);

代码运行结果:

E:\php_project\设计模式\Lemon_lyue\Database.php:32:
class Database#1 (0) {
}
E:\php_project\设计模式\Lemon_lyue\Database.php:32:
class Database#1 (0) {
}

由此看出,根据对象id可知道两次获取到的$db都是同一个。

单例模式应用场景

主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。