Prioridade de métodos ao trabalhar com traits na POO em PHP
Se uma classe e uma trait tiverem um método com o mesmo nome, o método da classe substituirá o método da trait:
<?php
trait TestTrait
{
// Método com o nome method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Método igual com o nome method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // exibirá 'test' - o método da própria classe foi executado
?>
Se a própria classe não tiver esse método, mas houver um conflito de nomes entre os métodos da trait e os métodos da classe pai, então os métodos da trait têm prioridade:
<?php
trait TestTrait
{
// Método com o nome method:
public function method()
{
return 'trait';
}
}
// Classe pai:
class ParentClass
{
// Método com o nome method:
public function method()
{
return 'parent';
}
}
// A classe herda o método method da classe pai:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // exibirá 'trait', pois a trait tem prioridade
?>