ohmydengzi
7/19/2018 - 3:10 AM

php单例模式

php单例模式

<?php

/**
 * 单例模式(Singleton):用于为一个类生成一个唯一的对象。
 * 最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
 *
 * 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。
 * 单例模式(singleton)有三个特点
 * 1、一个类只能有一个实例
 * 2、它必须自行创建这个实例
 * 3、它必须自行向整个系统提供这个实例
 */

/**
 * 单例类
 * Singleton.class
 */
class Singleton
{
    /**
     * 静态变量,保存全局实例
     */
    private static $_instance = NULL;

    /**
     * 私有化默认构造方法,保证外界无法直接实例化
     */
    private function __construct() {

    }

    /**
     * 静态工厂方法,返回此类的唯一实例
     */
    public static function getInstance($className = __CLASS__) {
        if (isset(self::$_instance[$className])) {
            return self::$_instance[$className];
        } else {
            $instance = self::$_instance[$className] = new $className(null);
            return $instance;
        }
    }

    /**
     * 测试用方法
     */
    public function test()
    {
        echo 'Singleton Test OK!';
    }
}


/**
 * 使用
 */
include "Singleton.class";

class Client
{
    public function main() {
        $instance = Singleton::getInstance();
        $instance->test();
    }
}