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

3

我一直在PHP中使用单例模式的注册表对象。像所有单例模式类一样,我认为主要方法应该如下:

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();

有人能解释一下单例类的作用吗?我真的不太理解。


可能是静态类和单例模式之间的区别?的重复问题。 - Sarfraz
哎呀!抱歉,我没有看见那个。 - Saif Bechan
2个回答

8
静态函数是一种可以在不创建类对象的情况下调用的函数。
registry::doSomething()

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

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,语法可能不完全正确,但是您应该大致理解我在面向对象编程方面的意思。


1

Singleton 是一种设计模式,它将类的实例化限制为一个单一对象,这使得一些使用静态类稍微困难的操作成为可能:

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

然而,Singleton 有几个缺点,因此通常最好使用 Factory 等模式,因为您可以获得额外的好处,例如解耦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接