Traits - uniqcle/Yii2 GitHub Wiki

Трейт - позволяет избегать повторного использования методов в разных классах. Фактически Trait это часть класса, кот. существует отдельно, но может подключаться к тем классам в которых она востребована.

Создаем в моделях папку example в ней 2 метода

frontend/models/example/Animal.php

namespace frontend\models\example; 

class Animal 
{
	public function walk(){
		echo 'I can walk'; 
	}
}

frontend/models/example/Human.php

namespace frontend\models\example; 

class Human 
{
	public function walk(){
		echo "I can walk"; 
	}
}

В контроллере frontend/controllers/ExampleController.php

namespace frontend\controllers; 

use yii\web\Controller; 

use frontend\models\example\Animal; 
use frontend\models\example\Human; 

class ExampleController extends Controller 
{
	public function actionMove(){

		$animal = new Animal(); 
		$human = new Human(); 

		$animal->walk();
		$human->walk(); 

	}
}

Чтобы избежать дублирования кода создаем frontend/models/example/SpecialTrait.php

namespace frontend\models\example; 

trait SpecialTrait
{

	public function walk(){
		echo "I can walk"; 
	}

}

А в классах Animal, Human добавляем конструкцию use

namespace frontend\models\example; 

class Animal 
{
	use SpecialTrait; 
}