Абстрактні класи в php

Відео: PHP Start | Теорія: Урок 16. ООП # 4. Абстрактний клас, інтерфейс

Абстрактні класи в PHP

У минулій статті ми розглянули механізм успадкування класів в PHP. Дійсно, цей механізм дуже класний, однак, давайте замислимося: "Чому ООП настільки зручно?". Я бачив багато суджень, але для мене воно зручно тим, що ООП - це аналог реальному житті. Адже навколо нас одні суцільні об`єкти: дерева, трави, будинки, ліси, автомобілі, дороги та інші об`єкти, які ми щодня бачимо перед своїми очима. І ООП - це механізм, що дозволяє перенести реальність в програмний код, і тоді програма стає дуже простий для використання і розуміння. Також в нашому світі існує багато абстрактних. Наприклад, що таке "ссавець"? Погодьтеся, що це абстрактність, адже не можна однозначно уявити собі ссавець. А ось кішку, яка відноситься до ссавців, вже можна. Безумовно, кішки теж бувають різних порід, тому, в деякому сенсі, і кішка - це не більше, ніж абстрактність. але все залежить від того, наскільки точно Ви хочете описати об`єкти. І для подання абстрактних об`єктів в PHP існує можливість створювати абстрактні класи.

Найголовніше, що необхідно зрозуміти так це те, що не можна створити об`єкти на основі абстрактних класів. Також існує таке поняття як абстрактні методи. абстрактні методи - це методи, реалізації яких ще не існує. Абстрактні методи повинні бути обов`язково реалізовані в класах-спадкоємців.

Для того, щоб закріпити отримані знання, давайте перепишемо задачу з минулої статті, але з використанням абстрактного класу. Почнемо з класу "Car", Що представляє"абстрактний автомобіль"(Файл"car.php"):

lt ;?php
abstractclassCar{
public $ x-
public $ y-
publicfunction __construct($ x, $ y){
$ this
-gt;x = $ x-
$ this
-gt;y = $ y-
}
abstractpublicfunction move ($ x, $ y) -
abstractpublicfunction sound() -
}
?gt;



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

Тепер подивіться, який вигляд має клас "Легковий автомобіль", Який, в нашому випадку, є вже не абстрактностью, а конкретною моделлю (файл"auto.php"):

lt ;?php
require_once
"Car.php"-
classAutoextendsCar{
publicfunction move($ x, $ y){
$ this
-gt;sound() -
echo
"Рух легкового автомобіля з координат ($ this-gt; x, $ this-gt; y) в координати ($ x, $ y)
"
-
$ this
-gt;x = $ x-
$ this
-gt;y = $ y-
}
publicfunction sound(){
echo
"Звук руху легкового автомобіля
"
-
}
}
?gt;



В даному прикладі ми реалізували два абстрактних методу, що прийшли з класу "Car", Батька для класу"Auto".

Відео: OOP and Design Patterns (урок 5) - Абстрактні і фінальні класи, інтерфейси

І, нарешті, давайте пограємось з об`єктом "Auto":

lt ;?php
require_once
"Auto.php"-
$ auto
=newAuto(10,20) -
echo $ auto
-gt;x-
echo
"
"
-
echo $ auto
-gt;y-
echo
"
"
-
$ auto
-gt;move(5,15) -
?gt;

Як бачите, ми створили об`єкт "Auto", Вивели його властивості, скористалися методом руху. Нічого складного тут немає.

Можливо, що Ви скажете: "А що покращився-то?". А покращився наступне: ми наблизилися до реальності, а, отже, поліпшили розуміння структури програми, спростили її код. Нерозумно і нерозумно створювати якісь "абстрактні об`єкти", Тим самим, виплоджуючи непотрібні реалізації"абстрактних методів". А наш приклад має мінімум коду, без реалізації абстрактності, яка, в общем-то, і не потрібна.

Поділися в соціальних мережах:

Схожі
Nodejs. Що таке потоки і буфери.Nodejs. Що таке потоки і буфери.
Функція __autoload в phpФункція __autoload в php
Reflection api. Reflectionclass.Reflection api. Reflectionclass.
Об`єкт object в jаvascriptОб`єкт object в jаvascript
Створення об`єктів в jаvascriptСтворення об`єктів в jаvascript
Створення винятків в phpСтворення винятків в php
Поради щодо використання умов в php.Поради щодо використання умов в php.
Адаптивна версткаАдаптивна верстка
Створення класу в phpСтворення класу в php
Що таке троттлінг?Що таке троттлінг?
» » Абстрактні класи в php