Основи ООП, 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. Функція, перевизначена таким чином, називається віртуальною.