我总是在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();
有人可以向我解释单身类的功能是什么。我真的不明白这一点。
答案 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这样的模式会更好,因为你可以获得额外的好处,比如去耦。