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

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

спадкування - це один з "трьох китів" ООП, який дозволяє створювати дочірні класи на основі батьківських (супер-класів), Забравши у них властивості, методи і конструктори. Хочеться зауважити, що успадкування класів в PHP зустрічається тільки вже в серйозних проектах. До того ж, новачки спадкування рідко використовують взагалі, але тим не менше. Коли я робив свій движок для сайту (а він досить великий), то використовував успадкування класів в PHP на повну катушку. І про те, як це робиться, я і напишу в цій статті.

Давайте для початку створимо який-небудь нескладний клас, наприклад, клас, який відповідає за об`єкт "автомобіль" (у файлі "car.php"):

lt ;?php
classCar{
public $ x-
public $ y-
publicfunction __construct($ x, $ y){
$ this
-gt;x = $ x-
$ this
-gt;y = $ y-
}
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"Ми визначили два властивості, що відповідають за поточні координати місця розташування автомобіля. Створили конструктор, який дозволяє призначити початкові координати. Потім створили метод move (), дозволяє почати рух в координати, передані в параметрах методу. Усередині цього методу ми викликаємо метод sound (), який запускає звук руху. Ось такий придуманий клас.

Відео: PHP Start | Теорія: Урок 14. ООП # 2. Спадкування, інкапсуляція




Тепер створимо клас, який відповідає за "Легковий автомобіль" (у файлі "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", Який є спадкоємцем для класу"Car"("class Auto extends Car"). З огляду на те, що клас"Auto"Уже забирає все властивості, методи і конструктори, то нам немає необхідності їх описувати заново. Однак, методи move () і sound () повинні мати іншу реалізацію, тому ми пишемо інший код цих методів.




І, наостанок, створимо скрипт, який створить об`єкт "Car"І"Auto"І скористаємося їх методами і властивостями:

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

Спочатку все просто: ми створюємо об`єкт "Car", Виводимо його властивості, використовуємо його метод move (). А ось потім ми створюємо об`єкт "Auto". З огляду на те, що ми не визначали свого конструктора в цьому класі, то він береться з батьківського. Потім виводимо властивості, які ми, до речі, також не визначали, і вони теж беруться з батьківського класу. А потім використовуємо метод move (). І, зрозуміло, береться реалізація не з класу "Car", А з класу"Auto", Який відповідає у нас за легковий автомобіль.

Відео: ООП для початківців PHP. Спадкування. Конструктори в спадкуванні. властивість protected

Однак, даний приклад є недосконалим, точніше, навіть дуже брудним, зважаючи на наявність дублювання (повторюваний код). І логіки в тому, що у нас існує "автомобіль"І"Легковий автомобіль"Теж немає. Ви можете уявити собі"автомобіль"? Упевнений, що у кожного з Вас будуть абсолютно різні образи. А ось"Легковий автомобіль"- це вже більш точне визначення (хоча теж далеко від остаточно точного). І в ООП для неточних, абстрактних понять, існує можливість створювати абстрактні класи, про які ми поговоримо в наступній статті. І Ви побачите, що код даного прикладу стане на порядок чистіше.

До речі, даю домашнє завдання: створити клас, який відповідає за "Вантажний автомобіль" (за аналогією з "легковим автомобілем"), І який буде успадковуватися від класу"автомобіль".

Відео: PHP. Основи ООП. Урок 6 - Спадкування

А успадкування класів в PHP на цьому не закінчується, і вже в наступній статті ми продовжимо цю тему.

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

Схожі
Модифікатори доступу в phpМодифікатори доступу в php
Ооп проти процедурного підходу.Ооп проти процедурного підходу.
Що нового в php7.1: ключове слово void.Що нового в php7.1: ключове слово void.
Створення движка на mvc. Допрацьовуємо роутер.Створення движка на mvc. Допрацьовуємо роутер.
Автоматичне завантаження класів в php з використанням spl_autoload.Автоматичне завантаження класів в php з використанням spl_autoload.
Абстрактні класи в phpАбстрактні класи в php
Метод tostring () в phpМетод tostring () в php
Reflection api. Reflectionclass.Reflection api. Reflectionclass.
Простори назв в php.Простори назв в php.
Створення винятків в phpСтворення винятків в php
» » Спадкування класів в php