<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

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

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

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

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

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

Каким движком Вы предпочитаете пользоваться?

Абстрактные классы в PHP

Абстрактные классы в PHP

В прошлой статье мы рассмотрели механизм наследования классов в PHP. Действительно, этот механизм очень классный, однако, давайте задумаемся: "Почему ООП настолько удобно?". Я видел много суждений, но для меня оно удобно тем, что ООП - это аналог реальной жизни. Ведь вокруг нас одни сплошные объекты: деревья, травы, дома, леса, автомобили, дороги и другие объекты, которые мы ежедневно видим перед своими глазами. И ООП - это механизм, позволяющий перенести реальность в программный код, и тогда программа становится очень простой для использования и понимания. Также в нашем мире существует много абстрактностей. Например, что такое "млекопитающее"? Согласитесь, что это абстрактность, ведь нельзя однозначно представить себе млекопитающее. А вот кошку, относящуюся к млекопитающим, уже можно. Безусловно, кошки тоже бывают разных пород, поэтому, в некотором смысле, и кошка - это не более, чем абстрактность. Но всё зависит от того, насколько точно Вы хотите описать объекты. И для представления абстрактных объектов в PHP существует возможность создавать абстрактные классы.

Самое главное, что необходимо понять так это то, что нельзя создать объекты на основе абстрактных классов. Также существует такое понятие как абстрактные методы. Абстрактные методы - это методы, реализации которых ещё не существует. Абстрактные методы должны быть обязательно реализованы в классах-наследниках.

Для того, чтобы закрепить полученные знания, давайте перепишем задачу из прошлой статьи, но с использованием абстрактного класса. Начнём с класса "Car", представляющего "абстрактный автомобиль" (файл "car.php"):

<?php
  abstract class Car {
    public $x;
    public $y;
    public function __construct($x, $y) {
      $this->x = $x;
      $this->y = $y;
    }
    abstract public function move ($x, $y);
    abstract public function sound();
  }
?>

Как видите мы поставили ключевое слово "abstract", означающее, что данный класс является абстрактным. В этом классе мы реализовали конструктор (напоминаю, что создать объект абстрактного класса нельзя). Также описали два абстрактных метода. Под описанием подразумевается определение модификатора доступа, названия функции и входных параметров. А реализовываться эти методы должны в классах-наследниках.

Теперь посмотрите, какой вид имеет класс "Легковой автомобиль", который, в нашем случае, является уже не абстрактностью, а конкретной моделью (файл "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".

И, наконец, давайте поиграемся с объектом "Auto":

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

Как видите, мы создали объект "Auto", вывели его свойства, воспользовались методом движения. Ничего сложного тут нет.

Возможно, что Вы скажете: "А что улучшилось-то?". А улучшилось следующее: мы приблизились к реальности, а, следовательно, улучшили понимание структуры программы, упростили её код. Глупо и неразумно создавать некие "абстрактные объекты", тем самым, плодя ненужные реализации "абстрактных методов". А наш пример имеет минимум кода, без реализации абстрактности, которая, в общем-то, и не нужна.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

dsmts dsmts 30.12.2012 19:37:58

Что-то последние три темы вообще не смог понять. В принципе мне понятно про автомобили и про кошек :), что наследуется. Но что мне это даёт при создании сайта, не понятно. Возможно это всё элементарно, но до меня не доходит что-то. И комментариев нет как назло.

Ответить

Admin Admin 30.12.2012 20:55:04

Да, применить это при создании сайтов очень сложно, да и вообще как-либо использовать ООП сложно. Это приходит лишь с опытом. Поэтому был записан курс по созданию движка с использованием ООП: http://srs.myrusakovr.ru/php

Ответить

dsmts dsmts 30.12.2012 23:05:50

Спасибо. Может быть когда и пригодится. Но пока, думаю, это для меня рановато.

Ответить

kumakbtu kumakbtu 04.05.2013 14:49:46

Я никогда не использовал ООП в создание сайта. Не подскажете когда, где и как использовать ООП на примере, кроме движка?

Ответить

procivam procivam 10.03.2013 15:57:46

"А наш пример имеет минимум кода, без реализацию абстрактности, которая, в общем-то, и не нужна." Здесь опечатка : без реализацию абстрактности.

Ответить

Admin Admin 10.03.2013 20:52:49

Спасибо, исправил!

Ответить

lev_100rus lev_100rus 26.07.2013 03:19:49

У вас ошибка в этом предложении "Действительно, этот механизм очень классный, однако, давайте задумайся:"

Ответить

Admin Admin 26.07.2013 19:34:10

Спасибо, исправил.

Ответить

asoftgame asoftgame 01.08.2015 17:13:29

Я не пойму то-ли код не рабочий то-ли я тупой

Ответить

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