Prioritering av metoder vid arbete med traits i OOP i PHP

Om det finns en metod med samma namn i klassen och i traitet, kommer klassens metod att åsidosätta traitets metod:

php<?php
  trait TestTrait
  {
    // Metod med namnet method:
    public function method()
    {
      return 'trait';
    }
  }
  
  class TestClass
  {
    use TestTrait;
    
    // Samma metod med namnet method:
    public function method()
    {
      return 'test';
    }
  }
  
  $test = new TestClass;
  echo $test->method(); // skriver ut 'test' - klassens metod fungerade
?>

Om själva klassen inte har en sådan metod, men det finns en namnfångst mellan traitets metoder och föräldraklassens metoder, har traitets metoder prioritet:

php<?php
  trait TestTrait
  {
    // Metod med namnet method:
    public function method()
    {
      return 'trait';
    }
  }
  
  // Föräldraklass:
  class ParentClass
  {
    // Metod med namnet method:
    public function method()
    {
      return 'parent';
    }
  }
  
  // Klassen ärver metoden method från föräldern:
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo $test->method(); // skriver ut 'trait', eftersom traitet har prioritet
?>