抽象类在php中扩展抽象类?

时间:2010-05-07 14:34:52

标签: php oop singleton abstract-class

我正在研究一个简单的抽象数据库类。在我对这个类的使用中,我想要一些实例是一个单例。我想要一个抽象类一个单例,然后将它扩展到另一个 单例的抽象类中。这可能吗?推荐?


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

我想为此设置一个基类代码库,因此当我进行更改时,我不必保持两个文件同步。

2 个答案:

答案 0 :(得分: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 :(得分:1)

单例模式的实现必须满足两个要求:

  1. 它必须提供一种机制来访问单例类实例而不创建类对象
  2. 必须保留单例对象,以便不会多次实例化
  3. 只要提供,变化就是多重。如果这是你需要的,那么使类抽象从另一个抽象扩展是没有错的。但是,正如@Gordon所说,要注意覆盖静态方法/属性会导致PHP中的特殊行为< 5.3。