PHP设计模式

单例模式

单例模式属于创建型模式的一种。

目的

保证一个类有且仅有一个实例,并提供一个全局访问点。

应用场景

常用于数据库连接、缓存操作等场景。

示例代码

<?php
/**
 * 单例模式、以数据库连接为例。
 */

class MysqlConnection {

    /**
     * @var mysqli
     */
    private static $connection;

    /**
     * 由于使用 private 修饰 __construct 函数所以不能使用 new 关键字创建对象。
     * MysqlConnection constructor.
     */
    private function __construct()
    {
        //这种写法会产生警告 为了方便查看使用 self 访问
        // $this->connection = mysqli_connect('127.0.0.1', 'root', 'root');

        self::$connection = mysqli_connect('127.0.0.1', 'root', 'root');
    }

    /**
     * 必须从此处获得实例。
     * @return mysqli
     */
    public static function getConnect()
    {
        if (is_null(self::$connection))
        {
            self::$connection = new self();
        }

        return self::$connection;
    }

    /**
     * 防止被克隆
     */
    public function __clone()
    {
        // TODO: Implement __clone() method.

        trigger_error('Clone is not allowed !');
    }

}

$connection = MysqlConnection::getConnect();

$connection1 = MysqlConnection::getConnect();

var_dump($connection);

var_dump($connection1);

// 由打印结果可见是同一个实例

发表评论