Prioritatea metodelor la lucrul cu trăsături în OOP în PHP

Dacă într-o clasă și într-o trăsătură există o metodă cu același nume, atunci metoda clasei va suprascrie metoda trăsăturii:

php<?php
  trait TestTrait
  {
    // Metodă cu numele method:
    public function method()
    {
      return 'trait';
    }
  }
  
  class TestClass
  {
    use TestTrait;
    
    // Aceeași metodă cu numele method:
    public function method()
    {
      return 'test';
    }
  }
  
  $test = new TestClass;
  echo $test->method(); // va afișa 'test' - a funcționat metoda clasei în sine
?>

Dacă însă clasa în sine nu are o astfel de metodă, dar există un conflict de nume între metodele trăsăturii și metodele clasei părinte, atunci metodele trăsăturii au prioritate:

php<?php
  trait TestTrait
  {
    // Metodă cu numele method:
    public function method()
    {
      return 'trait';
    }
  }
  
  // Clasa părinte:
  class ParentClass
  {
    // Metodă cu numele method:
    public function method()
    {
      return 'parent';
    }
  }
  
  // Clasa moștenește metoda method de la părinte:
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo $test->method(); // va afișa 'trait', deoarece trăsătura are prioritate
?>