抽象类扩展了php中的抽象类?

抽象类扩展了php中的抽象类?,php,oop,singleton,abstract-class,Php,Oop,Singleton,Abstract Class,我正在开发一个简单的抽象数据库类。在我使用这个类时,我希望有一些实例是单例的。我想有一个抽象类,它不是一个单例,然后将它扩展到另一个抽象类,它是一个单例。这可能吗?推荐 编辑:我想有两个几乎相同的摘要,除了一个是单件。所以唯一的区别是,一个将拥有另一个的所有函数,但将拥有其他属性和方法,使其表现得像一个单例 我希望有一个基类代码库,这样当我进行更改时,我就不必保持两个文件同步 单例模式的实现必须满足两个要求: 它必须提供一种机制来访问singleton类实例,而无需创建类对象 它必须持久化si

我正在开发一个简单的抽象数据库类。在我使用这个类时,我希望有一些实例是单例的。我想有一个抽象类,它不是一个单例,然后将它扩展到另一个抽象类,它是一个单例。这可能吗?推荐


编辑:我想有两个几乎相同的摘要,除了一个是单件。所以唯一的区别是,一个将拥有另一个的所有函数,但将拥有其他属性和方法,使其表现得像一个单例


我希望有一个基类代码库,这样当我进行更改时,我就不必保持两个文件同步

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

  • 它必须提供一种机制来访问singleton类实例,而无需创建类对象
  • 它必须持久化singleton对象,以便不会多次实例化它

  • 只要提供了这一点,变化是多方面的。如果您需要的话,将类从另一个抽象扩展为抽象并没有什么错。但是,正如@Gordon所说的,请注意重写静态方法/属性会导致PHP<5.3中的特殊行为。

    在我做事的方式中,我认为抽象单例是没有用的。因为,

    1) 您想要成为单例的是您实例化的最后一个类,以便在应用程序中使用,无论它是库、模型、控制器还是视图,而不是抽象类

    2) 添加singleton方法很简单,可以用8行代码编写。见下文

    protected static $_instance;
    public static function getInstance()
    {
        if (!isset(self::$_instance)) {
            self::$_instance = new self();
        }
        self::$_instance;
    }
    
    3) PHP5.3以下版本不支持后期静态绑定。这将导致实例化抽象类,而不是继承它的最终类,并且不会像Gordon和nuqqsa所提到的那样按预期运行。因此,为了向后兼容,最好避免它