მეთოდების პრიორიტეტი ტრეიტებთან მუშაობისას PHP-ის OOP-ში

თუ კლასსა და ტრეიტში არის ერთიდაიგივე სახელის მეთოდი, მაშინ კლასის მეთოდი გადაფარავს ტრეიტის მეთოდს:

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' - იმუშავა კლასის მეთოდმა
?>

თუ კი თავად კლასს არ გააჩნია ასეთი მეთოდი, მაგრამ არსებობს ტრეიტის მეთოდების და მშობელი კლასის მეთოდების სახელების კონფლიქტი, მაშინ ტრეიტის მეთოდებს გააჩნიათ პრიორიტეტი:

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', რადგან ტრეიტს გააჩნია პრიორიტეტი
?>