ลำดับความสำคัญของเมธอดเมื่อทำงานกับ traits ใน OOP ใน PHP

หากในคลาสและใน trait มีเมธอดที่มีชื่อเดียวกัน เมธอดของคลาสจะแทนที่ เมธอดของ trait:

php<?php
  trait TestTrait
  {
    // เมธอดชื่อ method:
    public function method()
    {
      return 'trait';
    }
  }
  
  class TestClass
  {
    use TestTrait;
    
    // เมธอดเดียวกันชื่อ method:
    public function method()
    {
      return 'test';
    }
  }
  
  $test = new TestClass;
  echo $test->method(); // จะแสดง 'test' - เมธอดของคลาสเองทำงาน
?>

หากคลาสเองไม่มีเมธอดดังกล่าว แต่มีความขัดแย้งของชื่อเมธอดระหว่าง trait และ เมธอดของคลาสแม่ เมธอดของ trait จะมีความสำคัญกว่า:

php<?php
  trait TestTrait
  {
    // เมธอดชื่อ method:
    public function method()
    {
      return 'trait';
    }
  }
  
  // คลาสแม่:
  class ParentClass
  {
    // เมธอดชื่อ method:
    public function method()
    {
      return 'parent';
    }
  }
  
  // คลาสสืบทอดเมธอด method จากคลาสแม่:
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo $test->method(); // จะแสดง 'trait' เพราะ trait มีความสำคัญกว่า
?>