Priorità dei metodi quando si lavora con i tratti nella OOP in PHP

Se una classe e un tratto hanno un metodo con lo stesso nome, il metodo della classe sovrascriverà il metodo del tratto:

php<?php
  trait TestTrait
  {
    // Metodo con nome method:
    public function method()
    {
      return 'trait';
    }
  }
  
  class TestClass
  {
    use TestTrait;
    
    // Lo stesso metodo con nome method:
    public function method()
    {
      return 'test';
    }
  }
  
  $test = new TestClass;
  echo $test->method(); // visualizzerà 'test' - è stato eseguito il metodo della classe stessa
?>

Se la classe stessa non ha un tale metodo, ma c'è un conflitto di nomi tra i metodi del tratto e i metodi della classe genitore, allora i metodi del tratto hanno priorità:

php<?php
  trait TestTrait
  {
    // Metodo con nome method:
    public function method()
    {
      return 'trait';
    }
  }
  
  // Classe genitore:
  class ParentClass
  {
    // Metodo con nome method:
    public function method()
    {
      return 'parent';
    }
  }
  
  // La classe eredita il metodo method dal genitore:
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo $test->method(); // visualizzerà 'trait', poiché il tratto ha priorità
?>