Перейти к основному содержимому

PHP — что такое трейты?

Трейт — это способ использовать одни и те же методы в разных классах: вы пишете методы один раз, и любой класс, которому они нужны, может их подключить.

Трейт может содержать как обычные, так и абстрактные методы, и эти методы могут иметь любой модификатор доступа (public, private или protected).

Поэтому трейты служат инструментом повторного использования кода: несколько методов можно свободно добавлять во множество разных классов.


Объявление трейта

Начните с ключевого слова trait, а затем дайте трейту имя:

Синтаксис трейта

Базовая форма определения трейта:

index.php
<?php
trait TraitName {
  // some code...
}
?>

Использование трейта

Внутри класса напишите ключевое слово use и имя трейта, чтобы подключить его.

В следующем примере есть трейт с именем message1 и класс с именем Welcome, который его использует. В результате все методы трейта становятся доступны в классе.

Совет: Любой другой класс, которому нужен msg1(), может использовать message1 таким же образом. Вы избегаете дублирования кода, поскольку один и тот же метод не приходится объявлять снова и снова.

Пример

Welcome использует трейт, поэтому его объекты могут вызывать метод трейта:

Prompt
Создайте PHP-трейт message1 с методом msg1(), который выводит сообщение. Создайте класс Welcome, использующий этот трейт. Создайте объект и вызовите msg1().
Вывод: PHP-скрипт

Использование трейта в классе

Как класс подключает трейт:

index.php
<?php
class MyClass {
  use TraitName;
}
?>

PHP — два класса и один трейт

Здесь один трейт, message1, содержит три публичных метода, а два класса, Welcome и Welcome2, используют его. Оба класса получают все три метода, но не обязаны вызывать их все: код вызывает только один метод у Welcome и все три у Welcome2.

Пример

Один и тот же трейт обслуживает два класса, которые вызывают разные его методы:

Prompt
Создайте PHP-трейт message1 с тремя публичными методами msg1(), msg2() и msg3(). Создайте классы Welcome и Welcome2, которые оба используют этот трейт. Welcome использует только msg1(), а Welcome2 — все три метода.
Вывод: PHP-скрипт

PHP — использование нескольких трейтов

Класс не ограничен одним трейтом. В этом примере есть два трейта, message1 и message2, и два класса. Welcome использует только message1, а Welcome2 использует оба, с запятой между именами трейтов.

Пример

Welcome2 перечисляет два трейта через запятую:

Prompt
Создайте два PHP-трейта message1 и message2 с методами msg1() и msg2() соответственно. Создайте класс Welcome, использующий только message1, и класс Welcome2, использующий оба трейта. Создайте объекты и вызовите методы.
Вывод: PHP-скрипт