Задача: задать некий контракт для трейта. Способы решения: https://www.php.net/manual/ru/language.oop5.traits.php#language.oop5.traits.abstract `trait Hello { public function sayHelloWorld() { echo 'Hello' . $this->getWorld(); }

abstract public function getWorld(); }

class MyHelloWorld { private $world;

use Hello;

public function getWorld() { return $this->world; }

public function setWorld($val) { $this->world = $val; } }

Если же мы хотим искусственно ограничить область применяемости трейта: `php

interface MyAwesomeInterface { public function do(): void; }

trait MyAwesomeTestHelper { protected function doAwesome(MyAwesomeInterface $i): void { $i-do(); } }

class MyAwesomeClass implements MyAwesomeInterface { use MyAwesomeTestHelper;

public function process() { $this->doAwesome($this); } }``