php实现单例
PHP 实现单例模式的方法
单例模式确保一个类只有一个实例,并提供一个全局访问点。以下是 PHP 中实现单例模式的常见方法:
私有化构造函数
防止外部直接实例化类:

private function __construct() {}
私有化克隆方法
防止通过克隆创建新实例:

private function __clone() {}
私有化反序列化方法
防止通过反序列化创建新实例:
private function __wakeup() {}
静态私有属性保存实例
private static $instance = null;
静态公共方法获取实例
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
完整示例代码
class Singleton
{
private static $instance = null;
private function __construct() {}
private function __clone() {}
private function __wakeup() {}
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
使用方法
$instance1 = Singleton::getInstance();
$instance2 = Singleton::getInstance();
var_dump($instance1 === $instance2); // 输出 true
线程安全考虑
PHP 本身是单线程运行环境,不需要考虑多线程下的单例问题。但在某些特殊环境下(如使用 pthreads 扩展),需要额外处理线程安全。
继承问题
如果需要继承单例类,可以将构造函数改为 protected,但这样会破坏单例模式的部分约束,需要谨慎使用。






