PHP ရှိ OOP တွင် Traits များနှင့်အလုပ်လုပ်စဉ် နည်းလမ်းများ၏ ဦးစားပေးအဆင့်

အကယ်၍ အတန်းတစ်ခုနှင့် 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 method ကို အမွေဆက်ခံသည်-
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo $test->method(); // 'trait' ကို ထုတ်ပြမည်၊ အဘယ့်ကြောင့်ဆိုသော် trait သည် ဦးစားပေးအခွင့်အရေးရှိသည်
?>