Приоритет на методите при работа с трейтове в ООП в PHP
Ако в клас и в трейт има метод със същото име, тогава методът на класа ще презапише метода на трейта:
<?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', тъй като трейтът има приоритет
?>