Расширение классов PHP - PullRequest
       8

Расширение классов PHP

3 голосов
/ 25 июня 2011

Я все еще учусь, как использовать классы, и мне было интересно, когда мне следует использовать ключевое слово extends (расширить класс).

Допустим, у меня есть класс, который выполняет задачу A (и этосинглтон).Можно ли распространить его на другой, который выполняет функцию B, даже если класс B на самом деле не связан с классом A, но использует много своих методов?Или я должен создать новый класс?

Ответы [ 4 ]

5 голосов
/ 25 июня 2011

Когда дело доходит до объектно-ориентированного программирования, обычно класс выполняет определенную задачу, такую ​​как удержание пользовательской информации или управление вводом / выводом.

Когда у вас есть, скажем, 1 объект, который используется для управления выводом, вы можете установить метод в этом объекте для управления типом вывода, или как каждый конкретный контент должен обрабатываться, но это будет означать, что объекты являются единственными цель была нарушена, поскольку теперь она не только отправляет контент, но и манипулирует контентом в зависимости от его типа.

Способ, которым мы используем для преодоления этого, состоит в группировке набора задач в группу классов / объектов, например:

abstract class Output
{
    public $content_type = 'text/plain';

    public function _send(){}
}

Выходной класс, очевидно, будет иметь гораздо больше методов, но только методов, связанных с выводом контента, таких как заголовки и т. Д., А не с манипулированием контентом, тогда у вас будет что-то вроде:

class HTMLOutput extends Output
{
     public $content_type = 'text/html';
}

и для манипулирования контентом:

class CSSOutput extends Output
{
    public $content_type = 'text/css';

    public _send()
    {
         if($_SERVER['APP']['Settings']['CSSCompress'] == '1')
         {
             $this->_compress_css();
         }

         parent::_send();
    }

    private function _compress_css()
    {
         $this->content = ; //Some compression lib
    }
}

Это основные пункты архитектуры, которые я соблюдаю при создании и организации множества сгруппированных классов / объектов.

4 голосов
/ 25 июня 2011

В объектно-ориентированном программировании класс должен расширять другой класс, как правило, если это специальный тип этого класса с более конкретным использованием.

Пример: класс Bike extends Automobile

Плохой Пример:Класс Car расширяет Bike (может использовать похожие методы, но это не имеет смысла)

2 голосов
/ 25 июня 2011

Убедитесь, что вы создали новые статические элементы для хранения экземпляра синглтона и перегрузили метод getInstance(). Если нет, то вы получите доступ к экземпляру A даже при вызове B::getinstance(), поскольку для обоих классов будет только один статический член.

0 голосов
/ 25 июня 2011

Расширения должны использоваться, например, если вы хотите получить доступ к закрытым переменным в обоих классах. Если бы вы могли показать свою работу, мы могли бы сказать вам, что вы должны / не должны делать.

...