Treytlarni treytlarda qo‘llash

Treytlar, klasslarga o‘xshab, boshqa treytlardan ham foydalanishi mumkin. Keling, buni misol bilan ko‘ramiz. Faraz qilaylik, bizda ikkita metodi bo‘lgan quyidagi treyt mavjud:

Trait1.php<?php
  trait Trait1
  {
    private function method1()
    {
      return 1;
    }
    
    private function method2()
    {
      return 2;
    }
  }
?>

Faraz qilaylik, bizda yana boshqa treyt mavjud:

Trait2.php<?php
  trait Trait2
  {
    private function method3()
    {
      return 3;
    }
  }
?>

Keling, Trait2 treytiga Trait1 treytini ulaymiz:

Trait3.php<?php
  trait Trait2
  {
    use Trait1; // birinchi treytni ishlatamiz
    
    private function method3()
    {
      return 3;
    }
  }
?>

Bunday ulanishdan so‘ng, Trait2 o‘z metodlaridan tashqari, Trait1 treytining metodlariga ham ega bo‘ladi. Buni tekshiramiz: Test klassini yaratamiz, unga Trait2 treytini ulaymiz va klassimizda ham birinchi treytning, ham ikkinchi treytning metodlari paydo bo‘lishiga ishonch hosil qilamiz:

Test.php<?php
  class Test
  {
    use Trait2; // ikkinchi treytni ulaymiz
    
    public function __construct()
    {
      echo $this->method1(); // birinchi treytning metodi
      echo $this->method2(); // birinchi treytning metodi
      echo $this->method3(); // ikkinchi treytning metodi
    }
  }
?>
Задание 1

Mustaqil ravishda menga o‘xshash treytlarni yarating va ularni Test klassiga ulang. Ushbu klassda getSum metodini yarating, ulangan treytlar metodlarining natijalari yig‘indisini qaytaradigan.