НОУ ІНТУІТ, Лекція, Об’єкти та класи в PHP

успадкування

Механізм успадкування - дуже важлива частина всього об'єктно-орієнтованого підходу. Спробуємо пояснити його суть на прикладі. Допустимо, ми створюємо опис людини. Очевидно, що зробити це ми можемо по-різному, залежно від того, навіщо потрібен цей опис. Можна описати людину як програміста: вона знає такі мови програмування, операційні системи, брав участь у таких проектах. Проте якщо людина програміст, він не перестає бути людиною взагалі, тобто. він має ім'я, прізвище, місце проживання тощо. Якщо перевести наші міркування терміни об'єктно-орієнтованого програмування, можна сказати, що ми описали два класу – клас людей і клас програмістів, кожен зі своїми властивостями і методами . Причому клас програмістів, очевидно, має всі властивості класу покупців, безліч при цьому має свої специфічні характеристики, тобто. Клас програмістів є підкласом класу людей. Так, якщо людина взагалі має ім'я, то програміст теж має бути, але не навпаки. Крім програмістів можна виділити ще безліч класів із професійної приналежності людей. І всі вони будуть підклас класу людей. Часто на практиці зручно визначати загальний клас, який може використовуватися відразу в кількох проектах (наприклад, клас людей або особистостей), та адаптувати його для специфічних потреб кожного проекту (наприклад, клас програмістів). Як це можна продати? За допомогою механізму розширень. Будь - який клас може бути розширенням іншого класу . Розширюючий (або похідний) клас, крім тих властивостей та методів, які описані у його визначенні, має всі функції та властивості основного (базового класу). У нашому прикладі клас програмістів розширює, а клас всіхлюдей – базовий. З класу не можна видалити існуючі властивості та функції, клас можна лише розширити. Розширюючий клас у PHP4 завжди залежить тільки від одного базового класу, оскільки множинне спадкування в PHP не підтримується. Розширюються класи в PHP за допомогою ключового слова extends.

Клас Programmer має ті ж змінні і функції, що і клас Person плюс плюс змінну $langs , в якій міститься список вивчених програмістом мов, і функцію set_lang для додавання ще однієї мови до списку вивчених. Створити представника класу програмістів можна звичайним способом за допомогою конструкції new. Після цього можна встановлювати та одержувати список мов, які знає програміст, і водночас можна використовувати функції, задані для класу Person, тобто. встановлювати та отримувати ім'я та прізвище програміста та відображати відомості про нього у браузері:

Відносини, у яких складаються створені нами класи Person і Programmer, називають також відносинами батько-нащадок. Клас Person – батько, яке нащадки, такі як клас Programmer , створюються, грунтуючись у ньому, з допомогою розширень. Будь-який клас може стати батьківським і породити нащадків.

Порядок визначення класів має значення. Не можна спочатку визначити клас Programmer, що розширює клас Person, а вже потім сам клас Person. Клас повинен бути визначений перед тим, як він використовуватиметься (розширюватиметься).