абстрактный класс расширяет абстрактный класс в php? - PullRequest
4 голосов
/ 07 мая 2010

Я работаю над простым абстрактным классом базы данных. При использовании этого класса я хочу, чтобы какой-то экземпляр был синглтоном. Я думал о том, чтобы иметь абстрактный класс, который является , а не синглтоном, а затем расширить его на другой абстрактный класс, который является синглтоном. Это возможно? Рекомендуется


Редактировать: я хочу, чтобы два реферата были практически идентичны, за исключением одного синглтона. Таким образом, единственная разница будет в том, что у одного будут все функции другого, но у него будут другие свойства и методы, которые заставляют его вести себя как одиночка.

Мне бы хотелось иметь одну базовую кодовую базу для этого, чтобы я вносил изменения, и мне не нужно было синхронизировать два файла.

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

В том, что я делаю, я считаю, что нет смысла в абстрактном синглтоне. Это потому, что

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 голос
/ 07 мая 2010

Реализация шаблона Singleton должна удовлетворять двум требованиям:

  1. Он должен обеспечивать механизм доступа к экземпляру синглтон-класса без создания объекта класса
  2. Он должен сохранять одноэлементный объект, чтобы он не создавался более одного раза

Пока это предусмотрено, вариаций много. Нет ничего плохого в том, чтобы сделать абстракцию класса продолжением другого абстракции, если это то, что вам нужно. НО, как говорит @Gordon, помните, что переопределение статических методов / свойств вызывает специфическое поведение в PHP <5.3. </p>

...