ลำดับความสำคัญของเมธอดเมื่อทำงานกับ traits ใน OOP ใน PHP
หากในคลาสและใน trait มีเมธอดที่มีชื่อเดียวกัน เมธอดของคลาสจะแทนที่ เมธอดของ trait:
<?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
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 มีความสำคัญกว่า
?>