简介
全局共用一个对象,益处是对象只实例化一次,缩小资源占用
角色
单例类
返回本类的惟一一个实例
代码
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多平台公布