Priorita metod při práci s trait v OOP v PHP
Pokud třída a trait mají metodu se stejným názvem, metoda třídy přepíše metodu traitu:
<?php
trait TestTrait
{
// Metoda s názvem method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Stejná metoda s názvem method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // vypíše 'test' - provedla se metoda samotné třídy
?>
Pokud samotná třída takovou metodu nemá, ale dochází ke konfliktu názvů metod traitu a metod rodičovské třídy, pak metody traitu mají prioritu:
<?php
trait TestTrait
{
// Metoda s názvem method:
public function method()
{
return 'trait';
}
}
// Rodičovská třída:
class ParentClass
{
// Metoda s názvem method:
public function method()
{
return 'parent';
}
}
// Třída dědí metodu method od rodiče:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // vypíše 'trait', protože trait má prioritu
?>