Основи обєктно-орієнтованого програмування на PHP

2

Від автора: сучасне професійне програмування просто немислимо, без об’єктно-орієнтованого програмування, яке не гласно стало своєрідним стандартом високорівневих мов програмування і, звичайно ж, PHP не виняток. Але так склалося, що перехід від процедурного стилю програмування, до об’єктній, супроводжується деякими труднощами у новачків, тому сьогодні ми з Вами розглянемо основи ООП в PHP.

Для початку, давайте розглянемо основні переваги об’єктно-орієнтованого підходу, щоб зрозуміти, чому ж він отримав таке широке поширення.

Код об’єктно-орієнтованого підходу досить простий в розумінні і читанні і відмінно підходить для реалізації масштабних і дуже непростих проектів.

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

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

Тепер, коли основні сильні сторони розглянутого стилю кодування можна переходити безпосередньо до суті даного уроку.

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

Відповідно, можна сказати, що основою методології об’єктно-орієнтованого програмування на PHP, є робота з об’єктами, або ж використання їх для маніпуляції над даними.

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

class Customer {
public $name;
protected $orders;
public function __construct($name, $orders) {
$this->name = $name;
$this->orders = $orders;
}
public function getName() {
return $this->name;
}
}
$customer = new Customer(‘Ben’, array(‘id’ => 10));
echo $customer->getName();

При реалізації екземпляра класу (тобто створення нового об’єкта, використовуючи певний зацікавив клас), формується новий об’єкт, а так само визначаються описані в класі властивості. Крім того запускається на виконання спеціальний метод, під назвою __construct(), якщо звичайно він описаний в структурі класу. Як Ви бачите для створення об’єкта, використовується ключове слово new, за яким слідує ім’я класу. В дужках при необхідності передаються аргументи для вищевказаного методу, в якому, як правило, визначаються деякі початкові дані для майбутнього об’єкта.

У прикладі вище, крім створення об’єкта, здійснюється виклик методу getName() і висновок на екран значення, що повертається їм. Звичайно, в результаті роботи скрипта ми побачимо висновок імені користувача — «Ben», оскільки саме воно передається в якості першого аргументу методом конструктору, де і записується у властивість класу під ім’ям name. Відповідно вищевказаний метод повертає в якості результату своєї роботи значення цієї властивості.

При цьому ні хто Вам не забороняє сформувати ще один подібний об’єкт з раніше описаного класу:

$customer2 = new Customer(‘Sem’, array(‘id’ => 15));
echo $customer2->getName();

В цьому випадку на екрані ми побачимо ім’я вже зовсім іншого користувача – «Sem». Таким чином ми, по суті створили зовсім інший об’єкт з одного і того ж шаблону – класу. При цьому в даного об’єкта, зовсім інші початкові дані, які так само формуються методом конструктором, а значить і його поведінка, визначається методами, так само буде іншим.

Зверніть увагу, що властивості класу і його методи можуть використовуватися тільки з конкретним об’єктом — якраз це й видно на прикладі, і без нього, вони абсолютно марні, в плані роботи за межами класу, тому як всередині класу, звичайно ж, вони можуть використовуватися в коді його методів. Причому доступ до вищевказаних елементів об’єкта, здійснюється через спеціальний набір знаків «->»(стрілочку) , перед якою необхідно вказати об’єкт, що цікавить ,або ж покажчик об’єкту – ключове слово $this. Покажчик об’єкта $this, використовується в коді методів, безпосередньо всередині класу для звернення до його властивостей або методів.

І знову ж таки ми з Вами бачимо, що основа розробки ООП на PHP — це робота з об’єктами, причому принадність полягає в тому, що ми один раз описуємо клас, а значить, формуємо якийсь набір даних та необхідний функціонал. А далі створюємо об’єкти, кожний з яких залежно від початкових даних, по суті, буде абсолютно унікальним.

З вище сказаного випливає, клас – на основі якого будуть створені об’єкти, описує дані і функціонал певної сутності майбутнього проекту, наприклад, робота з користувачами, сторінками, меню, адресами і т. д. І звичайно ,якщо таких сутностей кілька, то і класів, потрібно створювати кілька, а значить для кожного з них буде створено як мінімум один об’єкт. Хоча і не завжди, деколи деякі класи, створюються як батьків для певних дочірніх класів, а отже виступають в ролі зберігання , деякого загального функціоналу, що само собою передбачає створення цілої ієрархії класів майбутнього проекту. Але це вже зовсім інша тема, яка не вписується в рамки поточної статті.

Власне, ось ми з Вами коротко і розглянули основи об’єктно-орієнтованого програмування в PHP. Звичайно, даний вид програмування вимагає більшої уваги, ніж одна стаття, якщо Ви хочете дійсно добре розібратися в ньому і використовувати його у своїх напрацюваннях. Більш докладно ця тема розглянута в преміум курсі Об’єктно-орієнтоване програмування на PHP.

Всього Вам доброго у вдалого кодування!!!