PHP ООП - Трейти (ознаки)
PHP - Що таке трейти (ознаки)?
PHP підтримує лише одиночне успадкування: дочірній клас може успадковувати лише одного єдиного батьківського класу.
Отже, що, якщо класу потрібно успадкувати декілька поведінок? Особливості ООП вирішують цю проблему.
Трейти використовуються для оголошення методів, які можна використовувати в кількох класах. Трейти можуть мати методи та абстрактні методи, які можна використовувати в кількох класах, і методи можуть мати будь-який модифікатор доступу (публічний, приватний або захищений).
Трейти оголошуються за допомогою ключового слова trait
:
Синтаксис
<?php
trait TraitName {
// якийсь код...
}
?>
Щоб використовувати трейти в класі, використовуйте ключове слово use
:
Синтаксис
<?php
class MyClass {
use TraitName;
}
?>
Давайте розглянемо приклад:
Приклад
<?php
trait message1 {
public function msg1() {
echo "ООП - це файно! ";
}
}
class Welcome {
use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
Спробуйте самі »
Пояснення прикладу
Тут ми оголошуємо один трейт: message1. Потім ми створюємо клас: Welcome. Клас використовує трейт, і всі методи в цьому трейті будуть доступні в класі.
Якщо інші класи потребують використання функції msg1(), просто використовуйте властивість message1 у цих класах. Це зменшує дублювання коду, оскільки немає потреби повторно оголошувати той самий метод знову і знову.
PHP - Використання кількох трейтів
Давайте розглянемо інший приклад:
Приклад
<?php
trait message1 {
public function msg1() {
echo "ООП - це файно! ";
}
}
trait message2 {
public function msg2() {
echo "ООП зменшує дублювання коду!";
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
?>
Спробуйте самі »
Пояснення прикладу
Тут ми оголошуємо дві властивості: message1 і message2. Потім ми створюємо два класи: Welcome і Welcome2. Перший клас (Welcome) використовує трейт message1, а другий клас (Welcome2) використовує властивості message1 і message2 (кілька трейтів розділяються комою).