Priorita metód pri práci s traitmi v OOP v PHP
Ak trieda a trait majú metódu s rovnakým názvom, metóda triedy prepíše metódu trait-u:
<?php
trait TestTrait
{
// Metóda s názvom method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Rovnaká metóda s názvom method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // vypíše 'test' - spustila sa metóda samotnej triedy
?>
Ak samotná trieda nemá takúto metódu, ale existuje konflikt názvov metód trait-u a metód rodičovskej triedy, potom metódy trait-u majú prioritu:
<?php
trait TestTrait
{
// Metóda s názvom method:
public function method()
{
return 'trait';
}
}
// Rodičovská trieda:
class ParentClass
{
// Metóda s názvom method:
public function method()
{
return 'parent';
}
}
// Trieda zdedí metódu method od rodiča:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // vypíše 'trait', pretože trait má prioritu
?>