Как стать автором
Обновить

ООП и PHP. Часть 1 — наследование

ООП и PHP. часть 1 — наследование

Итак, сегодня речь пойдет об ооп в пыхе. Предпологается(раз ты это читаешь) — ты уже встречался с этим словом =)

Зачем это все писать — об этом и так куча разных книг/статей/еще чего-то
Считаю, что большинство из них переполнено термонологией и порой не совсем легки для восприятия(имхо).
Для кого это написано?
Очевидно, для людей, которые хотят поскорее вникнуть в основы ооп, не перерывая при этом кучу литературы/манов (хотя, надо отдать должное — это порой довольно полезное занятие).

Вступление

Итак, ты уже прочитал пару-тройку статей/книг по пхп и теперь считаешь себя мега-кодером? Однако читая хабр/форумы/т.п. ты встречаешь многа букв по поводу ООП в пхп? — Тогда надеюсь, эти статьи хоть немного помогут тебе понять/запутаться (нужное подчеркнуть) в сабже =)


Поехали

Как ты уже знаешь(или сейчас узнаешь), ключевыми понятиями ооп есть: наследования, абстракция, полиморфизм и инкапсуляция.
И начнем мы с наследования.

Пункт 1 — Предистория


Жила-была, значит, одна маленькая черная… кошка =). И была у нашей кошки одна интересная особенность — она умела гавкать =). И как-то так получилось, что в один прекрасный день, родился у нее котенок.

Так что же получилось в итоге? — наш котенок унаследовал основые функции котов: бегать, спать, жрать /и т.п.

И ты, наверное, подумал, что стал наш котенок копией мамаши? — Ан нет, оказалось, что гавкать он так и не научился, но вместо этого стал говорить по-человечески =)

Пункт 2 — Кодим предисторию


Итак, кошка будет выступать родительским классом =)
Начнем-с…
<?php

class Cat {

  public function __construct(){
    //добавляем основной функционал котов :)    
  }
  
  public function talk($text){
    //главная фича кошки    
    //гавкаем
  }

}


* This source code was highlighted with Source Code Highlighter.

Думаю, здесь все ясно. Метод talk(), как ты уже понял, отвечают за странную особенность нашей кошки.

И родила наша кошка котенка:
Приступим-с к наследнику =)

<?php
class Kitten extends Cat{

  public function __construct(){
    //вызываем конструктор кошки
    parent::__construct();
  }

}


* This source code was highlighted with Source Code Highlighter.

Теперь наш котенок умеет все то же, что и его мама…
<?php
$kitten = new Kitten();
$kitten->talk('гав гав');
?>

Хм… ах да, забыл — котенок должен ни гавкоть, а разговаривать =)
Так что же теперь делать? — Просто переопределим метод разговора (с гавканья на разговор).
<?php
class Kitten extends Cat{  
  public function __construct(){
    //вызываем конструктор кошки
    parent::__construct();
  }
  
  public function talk($text){
    //просто создаем новый метод с таким же названием
    //разговариваем      
  }

}?>


* This source code was highlighted with Source Code Highlighter.

и получаем
<?php
$kitten = new Kitten();
$kitten->talk('превед хабрачелавек=)');
?>


* This source code was highlighted with Source Code Highlighter.

Пункт 3 — Более реальные примеры или когда можно/нужно использовать наследование.


— Ты используешь чужую библиотеку/класс и решил его расширить (для своих нужд), тобишь дописать/переписать несколько необходимых _тебе методов.
— Ты решил использовать абстрактные классы в какой-то части своего приложения. Тут, естетсвенно, тебе поможет механизм наследования. (Об абстрактных классах, если ты захочешь, сможем поговорить в другой раз).
— Ты используешь механизм полиморфизма. (И об нем, мы, может, тоже поговорим ;) ).
— Ты пишешь свой фреймворк(хм, хотя таки странно, учитывая, что ты это читаешь :))? — Тогда для контроллера/модели можно/нужно использовать наследования.


Пункт 4 — Злоключение


— Что делать, если ты по каким-либо причинам не хочешь при написании класса оставить возможность его переопределять? — Добавить ключевое слово final перед объявлением метода
final public function do_smth(){}

* This source code was highlighted with Source Code Highlighter.
з.ы. Надеюсь, что в песочнице хоть кому-то это понравицо (очень надеюсь:)), а главное — для кого-то будет полезно. Спасибо =)

з.ы.2. Если инвайт я все-таки получу, то цикл статей продолжицо =)

_________
Текст подготовлен в
ХабраРедакторе
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.