ООП в php введення, блог веб-розробників
Написати про ООП в php кілька статей мене змусило те, що я не знайшов задовольнили мене статей по цій темі. Є сухі і нудні офіційні мануали або статті, де викладаються, по суті, ті ж мануали тільки з більш докладними прикладами, так само в мережі дуже багато застарілої інформації по цій темі.
Навіщо потрібно ООП?
Популярність і простота php призводить до того, що більшість написаного на цій мові коду має вельми сумнівна якість. Витративши зовсім небагато вільного часу на вивчення цієї мови і володіючи невеликою завзятістю, навіть якщо ви не знайомі з програмуванням, ви зможете почати писати веб-додатки. У міру вивчення php ви зможете робити їх більш функціональними. Однак, якщо ви не приділили часу проектування, незабаром внесення додаткових функцій в додаток, його налагодження і тестування ускладнюється і для додавання якоїсь дрібнички вам доводиться ворушити все більший обсяг коду, він стає все більш незрозумілим і заплутаним, інші розробники, ознайомившись з вашим кодом, почнуть лаятися і жорстко його критикувати.
Так у чому ж справа? Чому задуманий вами проект при розширенні настільки швидко може перетворитися на купу заплутаного коду з хмарою багів? Справа в тому, що новачки пишуть код, який робить тільки те, що від нього вимагається в одній конкретній ситуації і не передбачає внесення будь-яких змін. Такий підхід не прийнятний, особливо для веб-додатків, які неминуче повинні будуть рости і розвиватися якщо, звичайно, будуть популярні. Рано чи пізно вам, а може і іншим розробникам, буде необхідно повертатися до написаного раніше коду і вносити в нього зміни і чим простіше це буде зробити, тим швидше ваше додаток буде розвиватися і набирати популярність.
Крім того в ООП розповсюджені так звані шаблони проектування - шаблони рішення постійно виникає в програмуванні проблеми. Використання цих шаблонів дозволить по-перше вже знати рішення деякої проблеми до того, як вона виникла, а по-друге рішення проблеми буде зрозуміло іншим розробникам, знайомим з використаним вами шаблоном.
Основні поняття
ООП - це методологія (спосіб, підхід) програмування згідно з якою програмний продукт представляється у вигляді взаємодіючих об'єктів. Я не згоден з тим, що ООП завжди має на увазі використання класів - js, наприклад об'єктно-орієнтована мова, але в ньому немає класів. Однак в застосуванні до php ООП завжди має на увазі використання класів.
Під об'єктом зазвичай розуміється якась іменована сутність, що зберігає в собі дані і має свою власну поведінку. Поведінка об'єкта і структуру даних, які він зберігає, а також способи доступу до цих даних, описує клас, до якого цей об'єкт належить. Клас це опис чимось схожих, споріднених об'єктів, які зазвичай зберігають однаковий набір даних і мають однакову поведінку. Об'єкт, який належить якомусь конкретному класу, називають його примірником. Як приклад можна привести клас, що описує користувача. Цей клас описує структуру даних, які буде зберігати в собі кожен екземпляр цього класу. Нехай цими даними будуть логін і пароль. Об'єкт класу, який зберігає конкретні значення логіна і пароля буде екземпляром цього класу.
Три кити ООП

ООП базується на трьох принципах, які часто називають трьома китами ООП, це:
Інкапсуляція - це принцип, згідно з яким дані об'єднуються і зберігаються в об'єктах, а так само захищаються від невірного використання.
Можливо, вам здасться дивним, що програміст сам себе ж обмежує в правах на читання або зміна даних, але дуже часто буває, що до кінця простежити і зрозуміти як працює код дуже складно і, тому варто уникати ситуацій, які свідомо помилкові.
Як приклад неправильного використання даних можна навести спробу привласнити негативний вік примірнику класу людина. Природно, що така спроба при добре написаному коді не повинна увінчатися успіхом, в іншому випадку принцип інкапсуляції буде порушений.
На практиці принцип інкапсуляції полягає в тому, що для доступу до даних використовуються методи, які можуть фільтрувати або коригувати значення даних, які ми намагаємося змінити.
Спадкування - це процес придбання одним типом об'єктів (класом) деяких властивостей іншого типу об'єктів.
Дуже часто буває, що опис одного типу об'єктів тобто клас, повністю потрапляє під опис іншого типу об'єктів. Наприклад, клас, що описує адміна, може описати і користувача, за винятком того, що у користувача немає прав доступу. У цьому випадку має сенс зробити клас, що описує адмінів, нащадком класу, що описує користувачів. При цьому в класі, який описує адмінів, не доведеться описувати дані і поведінку, які вже описані в класі «користувач», нам необхідно тільки описати дані, які будуть відповідати за надання прав доступу. В цьому випадку клас «користувач» буде предком класу «адмін», який може мати свого нащадка, а той свого і т.д. Ланцюжок спадкування може бути як завгодно довгою. Крім того у одного предка може бути кілька нащадків, кожен з яких повністю придбає властивості свого предка і додасть в них щось своє, інакше спадкування безглуздо.
Поліморфізм - це використання одного і того ж імені методу для вирішення декількох схожих завдань.
На цьому вистачить нудною теорії. Наступного разу я напишу про те як описувати класи, створювати екземпляри класу, звертатися до даних (полів) і методам примірника.