Трейты PHP

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

Для того чтобы получить доступ к методам и свойствам трейта используется ключевое слово «use«.

Если используется несколько трейтов, и трейты содержат метод с одинаковым названием, то для разрешения этого конфликта используется используется оператор «insteadof «, благодаря которому явно указывается трейт, у которого будет браться метод.

Пример:

<?

trait WishOne
{
    public function sayYourWish() 
	{
        return 'Mom, i want to walk';
    }
}
trait WishTwo
{
    public function sayYourWish() 
	{
        return 'Mom i dont want to walk';
    }
}

class GetWish
{
    use WishOne,WishTwo
	{
            WishOne::sayYourWish insteadof WishTwo;
//			WishTwo::sayYourWish insteadof WishOne;
    }
    public function tellMe()
	{
            echo $this->sayYourWish();
    }
}

$obj = new GetWish();
$obj->tellMe(); // Mom, i want to walk

WishOne::sayYourWish insteadof WishTwo; — данная строка кода Нам говорит о том, что метод sayYourWish() необходимо брать из трейта WishOne, а не из трейта WishTwo.

После выполнения скрипта, на экране получим — «Mom, i want to walk»

Еще несколько слов о трейтах, которые желательно знать:

  • Методы текущего класса переопределяют методы трейта.
  • Методы трейта переопределяют унаследованные классом методы.
  • Невозможно создать экземпляр трейта.

Добавить комментарий