Menetelmien prioriteetti piirteiden kanssa työskennellessä OOP:ssa PHP:ssä

Jos luokassa ja piirteessä on samanniminen menetelmä, niin luokan menetelmä korvaa piirteen menetelmän:

php<?php
  trait TestTrait
  {
    // Menetelmä nimeltä method:
    public function method()
    {
      return 'trait';
    }
  }
  
  class TestClass
  {
    use TestTrait;
    
    // Samanniminen menetelmä nimeltä method:
    public function method()
    {
      return 'test';
    }
  }
  
  $test = new TestClass;
  echo $test->method(); // tulostaa 'test' - luokan oma menetelmä toimi
?>

Jos luokalla itsellään ei ole sellaista menetelmää, mutta on nimen conflict piirteen menetelmien ja parent classin menetelmien välillä, niin piirteen menetelmillä on prioriteetti:

php<?php
  trait TestTrait
  {
    // Menetelmä nimeltä method:
    public function method()
    {
      return 'trait';
    }
  }
  
  // Parent class:
  class ParentClass
  {
    // Menetelmä nimeltä method:
    public function method()
    {
      return 'parent';
    }
  }
  
  // Luokka perii menetelmän method parent classilta:
  class TestClass extends ParentClass
  {
    use TestTrait;
  }
  
  $test = new TestClass;
  echo test->method(); // tulostaa 'trait', koska piirteellä on prioriteetti
?>