Методи обєктно-орієнтованого програмування на PHP

33

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

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

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

Тепер давайте створимо об’єкт вищевказаного класу і подивимося, як можна звернутися до методу myFunc(), тобто викликати його на виконання.

$user1 = new User();
$user1->myFunc();

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

Тепер, швидше за все, у Вас виникло питання – як в методах маніпулювати властивостями об’єкта, тобто, як отримати до них доступ, адже, звернутися до властивості як звичайної змінної не вийде. Бо, Ви знаєте, що для роботи з властивостями, так і об’єктами, необхідний об’єкт, як реалізація певного класу. Тому, для того щоб звернутися з коду методу, до властивостей класу, або ж його іншому описаним методом – необхідно звернутися до зарезервованої змінної $this, за якою вказати, вже знайомі нам символи «->» і звичайно ж ім’я цікавить елемента.

name;
}
}
$user1 = new User();
$user1->name = «Ben»;
$user1->myFunc();

Зарезервована змінна $this – надає доступ до об’єкту класу, до властивості або методу якого необхідно звернутися. У прикладі вище, метод myFunc(), відображає на екрані значення властивості $name, тому так як, воно не визначено за замовчуванням, перед викликом методу на виконання, визначимо вміст цієї властивості. На екрані, звичайно ж, ми побачимо рядок «Ben». Таким чином, формуючи структуру конкретного методу, ми можемо навіть не замислюватися про тих об’єктах, які будуть створюватися на основі класу, так як змінна $this – це прямий покажчик об’єкта.

Так же ні хто нам не заважає, з одного методу, звернутися до іншого:

name;
}
public function show() {
echo myFunc();
}
}
$user1 = new User();
$user1->name = «Ben»;
$user1->myFunc();

У прикладі вище, метод myFunc () повертає значення властивості об’єкта $name, яке відображається на екран за допомогою методу show(). При цьому доступ до методу myFunc(), здійснюється з коду методу show(), знову ж таки використовуючи $this.

Таким чином, тепер Ви знаєте, навіщо використовуються методи об’єктно-орієнтованого підходу в PHP. Але зверніть увагу на попередні приклади, погодьтеся, не зовсім зручно, кожен раз при створенні, об’єкта, звертатися до його властивостей для визначення необхідних значень. Хотілося б, що б при створенні об’єкта, як би автоматично визначалися значення конкретних властивостей, тобто визначити початковий стан об’єкта. І при необхідності ми можемо цю можливість описати. Для цього можна використовувати один з магічних методів, під назвою конструктор. Магічним методом в об’єктно-орієнтованому програмуванні PHP, є – спеціальний метод в імені якого присутній префікс «__» і який викликається при певних умовах. Тема даної статті, звичайно ж, не пов’язана з методами подібного типу, але все ж один із них ми з Вами розглянемо.

Отже, метод конструктора – це метод, який викликається при створенні об’єкта класу і іменується _construct() (ім’я починається з подвійного підкреслення). Таким чином, Ви можете використовувати його для попереднього налаштування стану об’єкта. Тому приклади вище ми можемо переписати наступним чином:

name = $name;
$this->login = $login;
$this->email = $email;
}
public function myFunc() {
return $this->name;
}
public function show() {
echo myFunc();
}
}
$user1 = new User(‘Ben’,’ben’,’[email protected]’);
$user1->myFunc();

В даному прикладі, ми вручну, при створенні об’єкта $user1, не задаємо значення для властивостей – за нас це робить конструктор. При цьому, створюючи об’єкт, після імені класу, в круглих дужках, ми передаємо аргументи, для методу конструктора – ім’я, логін і поштову скриньку користувача. Далі в конструкторі, використовуючи знайому нам змінну $this – ми звертаємося до необхідних властивостей об’єкта та визначаємо їх значення. Таким чином, далі, можна звертатися до методу show(), для відображення інформації про користувача на екран. Власне інші магічні методи ООП підходу на PHP ми з Вами будемо розглядати в наступних статтях цієї серії.

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

На цьому у мене все. Всього Вам доброго і вдалого кодування!!!