PHP静态类和单例类之间的确切区别是什么

时间:2010-05-17 14:02:46

标签: php static singleton

我总是在PHP中使用Singleton类作为注册表对象。作为所有Singleton类,我认为main方法如下所示:

class registry
{
    public static function singleton()
    {
        if( !isset( self::$instance ) )
        {
            self::$instance = new registry();
        }
        return self::$instance;
    }

    public function doSomething()
    {
        echo 'something';
    }
}

所以每当我需要一些注册表类时,我都会使用这样的函数:

registry::singleton()->doSomethine();

现在我不明白创建一个普通的静态函数有什么区别。如果我只使用普通的静态类,它会创建一个新对象。

class registry
{
    public static function doSomething()
    {
        echo 'something';
    }
}

现在我可以使用:

registry::doSomethine();

有人可以向我解释单身类的功能是什么。我真的不明白这一点。

2 个答案:

答案 0 :(得分:8)

静态函数是一种可以在不创建类的对象的情况下调用的函数。

registry::doSomething()

Singleton是一种设计模式,可以防止类的用户创建多个类的实例。因此,通常只有单个类的一个实例。 Singleton的构造函数应该声明为 private ,并且有一个提供单个实例对象的静态方法:

class Singleton
{
   private Singleton()
   {
   }

   private static var $instance = null;

   public static getInstance()
   {
     if(self::$instance == null)
       self::$instance = new Singleton();
     return self::$instance; 
   }
}

有关详细信息,请参阅http://en.wikipedia.org/wiki/Singleton_pattern

P.S:抱歉我的PHP不好,语法可能不是100%正确,但你应该大致明白我的OOP意思。

答案 1 :(得分:1)

Singleton是一种设计模式,它将类的实例化限制为一个单独的对象,因此可以使用静态类做一些稍微困难的事情:

  • 延迟初始化
  • 通过对Factory
  • 进行子类化来内部替换实现
  • 通过配置进行管理

然而,单身人士有几个缺点,所以一般来说使用像Factory这样的模式会更好,因为你可以获得额外的好处,比如去耦。