Priorité des méthodes lors de l'utilisation de traits en POO en PHP
Si une classe et un trait ont une méthode homonyme, alors la méthode de la classe remplacera la méthode du trait :
<?php
trait TestTrait
{
// Méthode nommée method :
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Méthode du même nom method :
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // affichera 'test' - la méthode de la classe a fonctionné
?>
Si la classe elle-même n'a pas une telle méthode, mais qu'il y a un conflit de noms entre les méthodes du trait et les méthodes de la classe parente, alors les méthodes du trait ont la priorité :
<?php
trait TestTrait
{
// Méthode nommée method :
public function method()
{
return 'trait';
}
}
// Classe parente :
class ParentClass
{
// Méthode nommée method :
public function method()
{
return 'parent';
}
}
// La classe hérite de la méthode method du parent :
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // affichera 'trait', car le trait a la priorité
?>