#7.11 php Наследование классов

Зачастую удобно не разрабатывать новый класс заново, а основать его на каком-либо другом классе. Например, предположим, что разработан класс Vehicle, в котором содержатся разнообразные методы управления транспортным средством, например, start, run, step и stop. Далее, пусть требуется создать классы, описывающие специфические типы транспортных средств, например, Car, Truck, Helicopter, Oceanliner и т.д.

Можно скопировать существующие методы start, run, step и stop из класса Vehicle в каждый из вновь создаваемых классов, а можно создать эти классы на основе базового класса при помощи механизма наследования. Путем наследования все свойства и методы базового класса (например, Vehicle) становятся доступными для всех его потомков (Car и т.д.). Кроме того, каждый из порожденных классов может иметь свои собственные свойства и методы.

В следующем примере на основе базового класса Animal создается порожденный класс Lion. Он будет содержать все свойства и методы базового класса; кроме того, в нем описывается новый метод -- roar. Поскольку далеко не все животные рычат, наличие такого метода в базовом классе было бы некорректным. В то же время львы рычат, и метод roar отлично вписывается в класс Lion.

Для порождения одного класса от другого используется ключевое слово extends, после которого указывается имя базового класса. Класс, который наследуется от базового, называется производным. После создания объекта класса Lion доступным является не только его собственный метод roar, но и метод set_name, описанный в базовом классе Animal.

Пример 1. Наследование классов

<HTML>
    <HEAD>
        <TITLE>Наследование класса</TITLE>
    </HEAD>
    <BODY>
        <CENTER>
            <H1>
                Наследование класса
            </H1>
            <?php
                class Animal
                {
                    protected $name;
                    
                    public function set_name($text) 
                    {
                        $this->name = $text;
                        
                    }
                    
                    public function get_name() 
                    {
                        return $this->name;
                    }
                }
                
                class Lion extends Animal 
                {    
                    public function roar() 
                    {
                        echo $this->name, " рычит! <BR>";
                    }
                }

                echo "Создание нового льва...<BR>";
                
                $lion  = new Lion;
                $lion->set_name("Бонифаций");
                echo $lion->roar();

            
            ?>
        </CENTER>
    </BODY>
</HTML>

Результат выполнения примера представлен на рисунке 1. Применение наследования позволяет повторно использовать значительные объемы кода.



Рис. 1. Наследование классов

Key Words for FKN + antitotal forum (CS VSU):