ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

PHP Учебник

PHP СТАРТ PHP Интро PHP Установка PHP Синтаксис PHP Комментарии PHP Переменные PHP Echo / Print PHP Типы данных PHP Строки PHP Числа PHP Математика PHP Константы PHP Операторы PHP If...Else...Elseif PHP Switch PHP Циклы PHP Функции PHP Массивы PHP Суперглобальные PHP RegEx

PHP Формы

PHP Обработка формы PHP Проверка формы PHP Обязательные поля формы PHP Форма URL/E-mail PHP Заполнение формы

PHP Расширенный

PHP Дата и время PHP Подключение файлов PHP Обработка файлов PHP Файл открыть/читать PHP Файл создать/записать PHP Файл Загрузить PHP Куки PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Callback функции PHP JSON PHP Исключения

PHP ООП

PHP Что такое ООП PHP классы/объекты PHP Конструктор PHP Деструктор PHP Модификаторы доступа PHP Наследование PHP Константы PHP Абстрактные классы PHP Интерфейсы PHP Трейты PHP Статические методы PHP Статические свойства PHP Пространства имён PHP Итерации

MySQL База данных

MySQL База данных MySQL Подключение MySQL Создать БД MySQL Создать таблицы MySQL Вставить данные MySQL Получить последний ID MySQL Вставить несколько записей MySQL Подготовленные инструкции MySQL Выбрать данные MySQL Where MySQL Order By MySQL Удаление данных MySQL Обновление данных MySQL Ограничение данных

PHP XML

PHP XML Парсеры PHP SimpleXML Парсер PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Интро AJAX PHP AJAX База данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры PHP Компилятор PHP Викторина PHP Упражнения PHP Сертификат

PHP Справочник

PHP Обзор PHP Массив PHP Календарь PHP Дата PHP Каталог PHP Ошибка PHP Исключение PHP Файловая система PHP Фильтр PHP FTP PHP JSON PHP Ключевые слова PHP Libxml PHP Почта PHP Математика PHP Разное PHP MySQLi PHP Сеть PHP Output Control PHP RegEx PHP SimpleXML PHP Поток PHP Строка PHP Обработка переменных PHP XML Парсер PHP Zip PHP Часовые пояса

PHP. Уроки для начинающих

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 (несколько трейтов разделяются запятой).