PHP-dä OOP-da treýtlar

Bilşiňiz ýaly, PHP-dä bir wagtyň özünde birnäçe klasdan dogrylyp bolmaýar, diňe birinden. Öň biz bu meseläniň çözgüdini geçdik: miras almak ýerine bir klaslaryň obýektlerini beýlekileriniň içinde ulanmak.

PHP-dä ýene bir usul hem bar. Ol treýtlary ulanmakdan ybarat. Treýt beýleki bir klasa goşup bolýan aýratynlyklar we usullar toplumyny öz içine alýar. Şol ýerde aýratynlyklar we usullar treýt tarapyndan klas üçin özüniňki ýaly kabul ediler.

Treýtiň sintaksisi klasyňky bilen birmeňzeş, ýöne treýtiň adyny trait açar sözi bilen yglan etmekden başga.

Treýtiň nusgasyny döredip bolmaýar - treýtlar diňe beýleki klaslara birikdirilmek üçin niýetlenendir. Özi birikdirmek use buýrugy bilen amala aşyrylýar, onuň yzyndan boşluk bilen birikdirilýän treýtiň ady görkezilýär. Bu buýruk klasyň başynda ýazylýar.

Geliň treýtleriň ulanylyşyny amaly mysalda göreli. Bizde şeýle treýt bolsun Helper, öz içine alýan hususy aýratynlyklar name we age, şeýle hem olaryň getterleri:

Helper.php<?php
  trait Helper
  {
    private $name;
    private $age;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Bizde şeýle klas User hem bolsun, onuň konstruktorunda aýratynlyklar name we age bellenilýär:

User.php<?php
  class User
  {
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
  }
?>

Indi geliň aýratynlyklarymyz üçin getterleri goşalyň biziň klasymyzyň User. Ýöne olary klasyň özünde ýazmazlyk, diňe birikdireliň treýt Helper, bu usullar ýöne eýýäm amala aşyryldy:

User.php<?php
  class User
  {
    use Helper; // treýti birikdirýäris
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
  }
?>

Treýt birikdirilenden soň klasymyzda peýda bolar bu treýtiň usullary we aýratynlyklary. Şol ýerde ýüzlenýän boljak bolsa bu usullara we aýratynlyklara klasyň özüniňki ýaly:

index.php<?php
  $user = new User('john', 30);
  echo $user->getName(); // 'john' çykarar
  echo $user->getAge();  // 30 çykarar
?>
Задание 1

Aýratynlyklary bilen City klasyny amala aşyryň name, age, population we olar üçin getterler. Biziň klasymyz öz koduny gysgaltmak üçin eýýäm döredilen treýtimizi Helper ulanar.