Press "Enter" to skip to content

【PHP 设计模式】单例模式

当需要保证对象只有一个实例的时候,单例模式是非常有用的。它把创建对象的控制权交给一个单一的点上,任何时候应用程序都只会存在且仅存在一个实例。

单例类不应该能在类的外部进行实例化。

一个单例类应该具备以下几个因素:

  • 必须拥有一个访问级别为 private 的构造函数,用于阻止类被随意实例化
  • 必须拥有一个保存类的实例的静态变量
  • 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为 getInstance()
  • 必须拥有一个私有的空的 clone 方法,防止实例被克隆复制

单例模式简单实现如下:

<?php
class Single
{
    // 保存类实例的静态变量
    public static $_instance;

    // 私有的构造函数,阻止类被随意实例化
    private function __construct()
    {
        
    }

    // 私有的 clone 空方法,防止示例被克隆复制
    private function __clone()
    {
        
    }

    // 访问实例的公共静态方法,用于返回类的实例
    public static function getInstance() {
        if ( !self::$_instance ) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    // 测试方法
    public function sayHi() {
        echo "Hi Single !" . PHP_EOL;
    }
}

$single = Single::getInstance();
$single->sayHi(); // 输出:Hi Single !

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注