<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

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

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

Наследование - это один из "трёх китов" ООП, который позволяет создавать дочерние классы на основе родительских (супер-классов), забрав у них свойства, методы и конструкторы. Хочется заметить, что наследование классов в PHP встречается только уже в серьёзных проектах. Вдобавок, новички наследование редко используют вообще, но тем не менее. Когда я делал свой движок для сайта (а он достаточно большой), то использовал наследование классов в PHP на полную катушку. И о том, как это делается, я и напишу в этой статье.

Давайте для начала создадим какой-нибудь несложный класс, например, класс, отвечающий за объект "Автомобиль" (в файле "car.php"):

<?php
  class Car {
    public $x;
    public $y;
    public function __construct($x, $y) {
      $this->x = $x;
      $this->y = $y;
    }
    public function move ($x, $y) {
      $this->sound();
      echo "Движение автомобиля из координат ($this->x, $this->y) в координаты ($x, $y)<br />";
      $this->x = $x;
      $this->y = $y;
    }
    public function sound() {
      echo "Звук движения автомобиля<br />";
    }
  }
?>

В классе "Car" мы определили два свойства, отвечающие за текущие координаты местоположения автомобиля. Создали конструктор, который позволяет назначить начальные координаты. Затем создали метод move(), позволяющий начать движение в координаты, переданные в параметрах метода. Внутри этого метода мы вызываем метод sound(), который запускает звук движения. Вот такой придуманный класс.

Теперь создадим класс, отвечающий за "Легковой автомобиль" (в файле "auto.php"):

<?php
  require_once "car.php";
  class Auto extends Car {
    public function move($x, $y) {
      $this->sound();
      echo "Движение легкового автомобиля из координат ($this->x, $this->y) в координаты ($x, $y)<br />";
      $this->x = $x;
      $this->y = $y;
    }
    public function sound() {
      echo "Звук движения легкового автомобиля<br />";
    }
  }
?>

В самом начале мы подключаем наш класс "Car". Затем мы начинаем создавать класс "Auto", который является наследником для класса "Car" ("class Auto extends Car"). Ввиду того, что класс "Auto" уже забирает все свойства, методы и конструкторы, то нам нет необходимости их описывать заново. Однако, методы move() и sound() должны иметь другую реализацию, поэтому мы пишем другой код этих методов.

И, напоследок, создадим скрипт, который создаст объект "Car" и "Auto" и воспользуемся их методами и свойствами:

<?php
  require_once "auto.php";
  $car = new Car(10, 20);
  echo $car->x;
  echo "<br />";
  echo $car->y;
  echo "<br />";
  $car->move(15, 5);
  $auto = new Auto(5, 10);
  echo $auto->x;
  echo "<br />";
  echo $auto->y;
  echo "<br />";
  $auto->move(0, 0);
?>

Вначале всё просто: мы создаём объект "Car", выводим его свойства, используем его метод move(). А вот затем мы создаём объект "Auto". Ввиду того, что мы не определяли своего конструктора в этом классе, то он берётся из родительского. Затем выводим свойства, которые мы, кстати, также не определяли, и они тоже берутся из родительского класса. А потом используем метод move(). И, разумеется, берётся реализация не из класса "Car", а из класса "Auto", который отвечает у нас за легковой автомобиль.

Однако, данный пример является несовершенным, точнее, даже очень грязным, ввиду наличия дублирования (повторяющийся код). И логики в том, что у нас существует "Автомобиль" и "Легковой автомобиль" тоже нет. Вы можете представить себе "Автомобиль"? Уверен, что у каждого из Вас будут совершенно разные образы. А вот "Легковой автомобиль" - это уже более точное определение (хотя тоже далеко от окончательно точного). И в ООП для неточных, абстрактных понятий, существует возможность создавать абстрактные классы, о которых мы поговорим в следующей статье. И Вы увидите, что код данного примера станет на порядок чище.

Кстати, даю домашнее задание: создать класс, отвечающий за "Грузовой автомобиль" (по аналогии с "Легковым автомобилем"), и который будет наследоваться от класса "Автомобиль".

А наследование классов в PHP на этом не заканчивается, и уже в следующей статье мы продолжим эту тему.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (1):

SireNa SireNa 03.12.2013 08:58:24

Zdravstvuyte ya nemnogo ne ponyala odnu stroku koda. public function move ($x, $y) { $this->sound(); /*pochemu mi pishem zdes sound(),a ne move(),ved sledushaya stroka govorit o dvijenie. */ echo "Движение автомобиля из координат ($this->x, $this->y) в координаты ($x, $y)<br />"; $this->x = $x; $this->y = $y; } public function sound() { echo "Звук движения автомобиля<br />"; }

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.