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:
<?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:
<?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:
<?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:
<?php
$user = new User('john', 30);
echo $user->getName(); // 'john' çykarar
echo $user->getAge(); // 30 çykarar
?>
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.