ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
⊗ppOpTrInr 77 of 107 menu
Бесплатный курс по выкладке сайтов на хостинг. Разбираем все нюансы! Начало 14 октября. Жми для записи!

Трейты в ООП в PHP

Как вы уже знаете, в PHP нельзя наследовать от нескольких классов сразу, только от одного. Ранее мы уже проходили решение этой проблемы: вместо наследования использовать объекты одних классов внутри других.

В PHP есть и другой способ. Он заключается в использовании трейтов. Трейт представляет собой набор свойств и методов, которые можно включить в другой класс. При этом свойства и методы трейта будут восприниматься классом будто свои.

Синтаксис трейта такой же как и у класса, за исключением того, что имя трейта нужно объявлять с помощью ключевого слова trait.

Экземпляр трейта нельзя создать - трейты предназначены только для подключения к другим классам. Само подключение осуществляется с помощью команды use, после которой через пробел указывается имя подключаемого трейта. Данная команда пишется в начале класса.

Давайте посмотрим применение трейтов на практическом примере. Пусть у нас дан вот такой трейт Helper, содержащий приватные свойства name и age, а также их геттеры:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

Пусть у нас также есть вот такой класс User, в конструкторе которого задаются свойства name и age:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

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

<?php class User { use Helper; // подключаем трейт public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

После подключения трейта в нашем классе появятся методы и свойства этого трейта. При этом обращаться мы к ним будем будто к методам и свойствам самого класса:

<?php $user = new User('john', 30); echo $user->getName(); // выведет 'john' echo $user->getAge(); // выведет 30 ?>

Реализуйте класс City со свойствами name, age, population и геттерами для них. Пусть наш класс для сокращения своего кода использует уже созданный нами трейт Helper.

byenru