Задача: задать некий контракт для трейта. Способы решения: 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); } }``