简介

全局共用一个对象,益处是对象只实例化一次,缩小资源占用

角色

  • 单例类

    返回本类的惟一一个实例

代码

class Singleton{    private static $instances = [];    protected function __construct() { }    protected function __clone() { }    public function __wakeup()    {        throw new \Exception("Cannot unserialize a singleton.");    }    public static function getInstance(): Singleton    {        $cls = static::class;        if (!isset(self::$instances[$cls])) {            self::$instances[$cls] = new static();        }        return self::$instances[$cls];    }    public function someBusinessLogic()    {        // ...    }}function clientCode(){    $s1 = Singleton::getInstance();    $s2 = Singleton::getInstance();    if ($s1 === $s2) {        echo "Singleton works, both variables contain the same instance.";    } else {        echo "Singleton failed, variables contain different instances.";    }}clientCode();

output:

Singleton works, both variables contain the same instance.

本文由mdnice多平台公布