Приоритет методов
Если в классе и в трейте есть одноименный метод, то метод класса переопределит метод трейта:
<?php
trait TestTrait
{
// Метод с именем method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Такой же метод с именем method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // выведет 'test' - сработал метод самого класса
?>
Если же сам класс не имеет такого метода, но имеется конфликт имен методов трейта и методов родительского класса, то методы трейта имеют приоритет:
<?php
trait TestTrait
{
// Метод с именем method:
public function method()
{
return 'trait';
}
}
// Родительский класс:
class ParentClass
{
// Метод с именем method:
public function method()
{
return 'parent';
}
}
// Класс наследует метод method от родительского:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // выведет 'trait', тк трейт имеет приоритет
?>