Основи ООП, php

Об'єктно-орієнтовані програми більш прості і мобільні, їх легше модифікувати і супроводжувати, ніж їх "традиційних" побратимів. Крім того, схоже, сама ідея об'єктної орієнтованості при грамотному її використанні дозволяє програмі бути навіть більш захищеною від різного роду помилок, ніж це задумував програміст в момент роботи над нею. Однак нічого не дається даром: самі
ідеї ООП досить важкі для сприйняття "з нуля", тому до цих пір дуже велика кількість програм (різні системи Unix, Apache, Perl, та й сам PHP) все ще пишуться на старому доброму "об'єктно-неорієнтованому" Сі.

PHP до недавнього часу забезпечував лише деяку підтримку ООП. Однак, після виходу PHP5 підтримка ООП в PHP стала практично повною.

Стратегію ООП найкраще описати як зміщення пріоритетів в процесі програмування від функціональності програми до структур даних. Це дозволяє програмісту моделювати в створюваних додатках реальні об'єкти і ситуації. Технологія ООП володіє трьома головними перевагами:

Специфіка ООП помітно підвищує ефективність праці програмістів і дозволяє їм створювати більш потужні, масштабовані та ефективні програми.

Об'єктно-орієнтоване програмування засноване на:

* Інкапсуляція;
* Поліморфізм;
* Успадкування.

Інкапсуляція - це механізм, який об'єднує дані і обробляє їх код як єдине ціле.

Багато переваги ООП обумовлені одним з його фундаментальних принципів - инкапсуляцией. Инкапсуляцией називається включення різних дрібних елементів в більш великий об'єкт, в результаті чого програміст працює безпосередньо з цим об'єктом. Це призводить до спрощення програми, оскільки з неї виключаються другорядні деталі.

Інкапсуляцію можна порівняти з роботою автомобіля з точки зору типового водія. Багато водіїв не розуміються в подробицях внутрішнього устрою машини, але при цьому управляють нею саме так, як було задумано. Нехай вони не знають, як влаштований двигун, гальмо або рульове керування, - існує спеціальний інтерфейс, який автоматизує і спрощує ці складні операції. Сказане також відноситься до інкапсуляції і ООП - багато подробиць "внутрішнього устрою" ховаються від користувача, що дозволяє йому зосередитися на вирішенні конкретних завдань. В ООП ця можливість забезпечується класами, об'єктами і різними засобами вираження ієрархічних зв'язків між ними.

Поліморфізм дозволяє використовувати одні й ті ж імена для схожих, але технічно різних завдань. Головним в поліморфізм є те, що він дозволяє маніпулювати об'єктами шляхом створення стандартних інтерфейсів для схожих дій. Поліморфізм значно полегшує написання складних програм.

Класи і об'єкти в PHP

Клас - це базове поняття в об'єктно-орієнтованому програмуванні (ООП). Якщо сказати простіше, то клас - це своєрідний тип змінної.

Примірник класу - це об'єкт. Об'єкт - це сукупність даних (властивостей) і функцій (методів) для їх обробки. Дані та методи називаються членами класу. Взагалі, об'єктом є все те, що підтримує інкапсуляцію.

Усередині об'єкту дані і код (члени класу) можуть бути або відкриті, або ні. Відкриті дані і члени класу є доступними для інших частин програми, які не є частиною об'єкта. А ось закриті дані і члени класу доступні тільки усередині цього об'єкта.

Опис класів в PHP починаються службовим словом class:

Об'єкт = new ім'я_класу;

Дані описуються за допомогою службового слова var. Метод описується так само, як і звичайна функція. Методу також можна передавати параметри.

Приклад класу на PHP:

Доступ до класу та об'єктів в PHP

Ми розглянули, яким чином описуються класи і створюються об'єкти. Тепер нам необхідно отримати доступ до членів класу, для цього в PHP призначений оператор ->. Наведемо приклад:

Щоб отримати доступ до членів класу всередині класу, необхідно використовувати покажчик $ this, який завжди належить до поточного об'єкту. Модифікований метод Getname ():

Тепер для зміни імені можна використовувати метод Setname ():

А ось і повний лістинг коду:

Покажчик $ this можна також використовувати для доступу до методів, а не тільки для доступу до даних:

Іноді виникає необхідність виконати ініціалізацію об'єкта - привласнити його властивостям початкові значення. Припустимо, ім'я класу Coor і він містить дві властивості: ім'я людини і місто його проживання. Можна написати метод (функцію), який буде виконувати ініціалізацію об'єкта, наприклад Init ():

Головне не забути викликати функцію зразу після створення об'єкту, або викликати який-небудь метод між створенням (оператор new) об'єкта і його ініціалізацією (викликом Init).

Для того, щоб PHP знав, що певний метод потрібно викликати автоматично при створенні об'єкта, йому потрібно дати ім'я таке ж, як і у класу (Coor):

Метод, не започатковано об'єкт, називається конструктором. Однак, PHP не має деструкторів, оскільки ресурси звільняються автоматично при завершенні роботи скриптів.

Спадкування і поліморфізм класів в PHP

Спадкування класів в PHP

Спадкування - це не просто створення точної копії класу, а розширення вже існуючого класу, щоб нащадок міг виконувати які-небудь нові, характерні тільки йому функції. Розглянемо конкретний приклад на PHP:

Ключове слово extends (див. Приклад) говорить про те, що дочірній клас Child успадковує всі методи і властивості класу Parent. Батьківський клас зазвичай називають базовим класом або суперкласом, а дочірній клас Child - похідним або підкласом.

Поліморфізм класів в PHP

Поліморфізм - це властивості базового класу використовувати функції похідних класів. Практичний приклад, що показує властивість класу - поліморфізм:

У розглянутому прикладі функція base_funct () класу Base була переписана однойменною функцією класу Derivative. Функція, перевизначена таким чином, називається віртуальною.