2010-05-07 130 views
4

我正在研究一个简单的抽象数据库类。在我使用这个类时,我想让某个实例成为一个单例。我在想有抽象类,它是一个单身的,然后将其延伸到另一个抽象类,单身。这可能吗?推荐的?抽象类在PHP中扩展抽象类?


编辑:我想有两个几乎相同的摘要,除了一个是单身。所以唯一的区别是一个人会拥有另一个人的所有功能,但是会有其他的特性和方法,使其表现得像一个单身人士。

我想有这一个基类的代码库,以便我做出改变,我没有让两个文件同步。

回答

3

在我做事情的方式,我相信有一个抽象的单都没用。这是因为,你想成为一个单独什么

1)是您实例的应用程序中使用它是否会成为一个库,模型,控制器或视图,而不是抽象的最后一节课。

2)添加单方法容易,并且可以在8行写入。见下文。

protected static $_instance; 
public static function getInstance() 
{ 
    if (!isset(self::$_instance)) { 
     self::$_instance = new self(); 
    } 
    self::$_instance; 
} 

3)PHP 5.3以下版本不支持后期静态绑定。这将导致实例化抽象类而不是继承它的最终类,并且不会像预期的那样起作用,正如Gordon和nuqqsa已经提到的那样。所以,为了向后兼容,最好避免它。

1

Singleton模式的实施必须满足两个要求:

  1. 它必须提供一个机制来访问的单例类的实例,而无需创建一个类的对象
  2. 必须坚持单身对象,以便它是没有实例化超过一次

只要提供了它,变化就是多重的。如果这是您需要的,将类抽象从另一个抽象扩展出来是没有问题的。但是,正如@Gordon说,要知道,重写静态方法/属性导致PHP < 5.3奇特的行为。