PHP. ООП. Наследование классов

Главная » Видеоуроки » PHP » PHP. ООП. Наследование классов
В этом уроке мы продолжим знакомиться с парадигмой ООП в языке PHP. Рекомендую посмотреть вам прошлый урок, чтобы понимать предмет нашего сегодняшнего разговора. Сегодня мы обсудим наследование классов. Наследование — один из «китов» ООП. Два других «кита» — это инкапcуляция и полиморфизм, с которым мы тоже повстречаемся в этом уроке.
Давайте начнем с теории — в основе ООП, как уже упоминалось выше и говорится во многих других источниках, лежат три столпа — инкапсуляция, наследование и полиморфизм.

Инкапсуляция — это способность объекта/класса скрывать свою внутреннюю реализацию, предоставляя пользователю (разработчику) готовый интерфейс. Например, когда вы пользуетесь компьютером, вы не задаетесь вопросом, как сохраняются ваши данные, куда идут сигналы от устройства ввода в компьютер и так далее. У вас есть готовые средства, которые вам предоставляет компьютер. В ООП это по факту методы класса.

Наследование, уверен,  уже понятно из названия. Класс может унаследовать свойства и методы другого класса (смотрите код). Например, мы многое унаследовали от наших мам и пап.

Полиморфизм связан с наследованием — это возможность объекта переопределять методы потомка. Например, в коде мы переопределили метод setName().

Отмечу еще несколько важных вещей:
старайтесь следовать правилу — «один класс — один файл», не определяйте несколько классов одном файле.
В дочернем классе есть возможность вызывать конструктор родителя, используя ключевое слово parent::.

Рекомендую вам почитать раздел ООП на сайте php. Выскажу личное мнение — мне документация в данном разделе показалась непростой. Можно найти немало ресурсов на более простом языке.

Код урока
<?php

/*
** Наследование классов (наследовать можно только один класс)
** Есть негласное требование - "один класс - один файл"
** Переопределение свойств и методов
** Переопределение и порядок вызова конструктора
** Деструкторы - вызываются после окончания работы скрипта, или если на объект больше
**/

class Man {

    public $name;
    public $age = 27;

    public function __construct() {
        echo "Вызов конструктора";
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
        return $this->name;
    }

    public function __destruct() {
        echo "Вызов деструктора";
    }

}

class Kamil extends Man {

    public $age = 25;

    public function __construct() {
        echo "Вызов конструктора в дочернем классе" . "<br>";
        parent::__construct();
    }

    public function setName($name) {
        if($name = "Камиль") {
            $this->name = "Еще один Камиль";
        }
        return $this->name;
    }

}

$kamil = new Kamil();
echo "<br>";
print_r($kamil);
echo "<br>";

$kamil->setName("Камиль");

print_r($kamil);
echo "<br>";

0 Комментариев

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Подписаться на рассылку

Будьте в курсе - получайте последние статьи на свой email

Ваша подписка успешно оформлена

Pin It on Pinterest

Share This