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

Вы можете авторизоваться на сайте всего одним кликом:

2016-08-03
Основы PHP → Абстрактные классы и методы
PHP, Абстрактность, Нельзя создать экземпляр

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

Абстрактные классы и методы

В PHP 5 существует понятие абстрактных классов и методов. Вернемся к примеру с геометрическими фигурами. Как вы помните, мы ввели класс Фигура, который хранит данные о цвете и площади.

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

abstract class Article
{
   ...
}

Создавать экземпляр класса, который был объявлен абстрактным, нельзя.

Помимо классов абстрактными могут быть и методы, которые также определяются с помощью слова abstract. Абстрактные методы не имеют реализации. Они нужны для того, чтобы дочерние классы их переопределили. PHP-интерпретатор выдаст ошибку, если в неабстрактном классе-наследнике не будет переопределен хотя бы один абстрактный метод его родителя. Обычно абстрактные классы создаются для того, чтобы наследующие их дочерние классы переопределили недостающие методы. Класс, в котором объявлен хотя бы один абстрактный метод, должен также быть объявлен абстрактным. Проиллюстрируем теорию примером.

abstract class Article
{
   ...
   abstract function intro();

   function view()
   {
      $this->intro();
      echo "<h1>$this->id — $this->title</h1>"."<p>$this->content</p>";
   }
}

class NewsArticle extends Article
{
   ...
   function intro()
   {
   echo '<span style="color: red">'.strftime('%d.%m.%y', $this->datetime).' <b>Новость</b></span>';
   }
}

В приведенном примере класс Article является абстрактным, а значит, в программе не может быть объекта этого класса. Article содержит абстрактный метод intro(), который должен быть переопределен в потомках. Класс NewsArticle является наследником класса Article и переопределяет метод intro(). Поэтому в программе мы можем создавать объекты неабстрактного класса NewsArticle .

В заключение

На этом мы предлагаем на время приостановить свое знакомство с ООП и попрактиковаться в отработке пройденной теории. Не волнуйтесь, если на данный момент вы чувствуете некоторый сумбур в голове. Действительно, парадигма ООП вовсе не элементарна, и чтобы научиться применять в своих сценариях новые принципы, требуется время и много практики. Не устаем повторять вам, что только через регулярные практические занятия можно научиться хорошо программировать.

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

Остается повторить лишь одно: ООП — это стандарт современного профессионального программирования в первую очередь потому, что предоставляет новый уровень эффективности разработки. Без освоения этой парадигмы вы не можете считать себя полноценными программистами.

534
0
Пожалуйста, авторизируйтесь, чтобы скачать архив с файлами урока