PHP OOP - Трейты
PHP - Что такое трейты?
Traits - (в пер. с анг.) - характерные черты, особенности, признаки.
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 (несколько трейтов разделяются запятой).