一个国家同一时间只能有一位总统。只要使命召唤,这个总统就必须采起行动。 这里的总统就是一个单例。编程
确保特定类的对象只被建立一次。设计模式
在软件工程中,单例模式是一种软件设计模式,用来限制类初始化为对象。当偏偏只须要一个对象来协调整个系统的功能时,单例模式很是有用。ide
实际上,单例模式被认为是反模式,应该避免过分使用。 单例模式并不是很差,可能有时候颇有用,但应谨慎使用,由于它在你的应用程序中引入了全局状态,一处更改可能会影响其余地方,而且可能会变得很难调试。 另外很差的一点是单例模式会使代码紧耦合,单例也很难mock。函数
要建立一个单例,须要将构造函数设为 private,禁用克隆,禁用扩展名,并建立静态变量来容纳实例spa
final class President设计
{调试
private static $instance;对象
private function __construct()get
{io
// Hide the constructor
}
public static function getInstance(): President
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __clone()
{
// Disable cloning
}
private function __wakeup()
{
// Disable unserialize
}
}
$president1 = President::getInstance();
$president2 = President::getInstance();
var_dump($president1 === $president2); // true