Prioritatea metodelor la lucrul cu trăsături în OOP în PHP
Dacă într-o clasă și într-o trăsătură există o metodă cu același nume, atunci metoda clasei va suprascrie metoda trăsăturii:
<?php
trait TestTrait
{
// Metodă cu numele method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Aceeași metodă cu numele method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // va afișa 'test' - a funcționat metoda clasei în sine
?>
Dacă însă clasa în sine nu are o astfel de metodă, dar există un conflict de nume între metodele trăsăturii și metodele clasei părinte, atunci metodele trăsăturii au prioritate:
<?php
trait TestTrait
{
// Metodă cu numele method:
public function method()
{
return 'trait';
}
}
// Clasa părinte:
class ParentClass
{
// Metodă cu numele method:
public function method()
{
return 'parent';
}
}
// Clasa moștenește metoda method de la părinte:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // va afișa 'trait', deoarece trăsătura are prioritate
?>