Sifa za Ziada katika OOP katika PHP
Kama unavyojua tayari, katika PHP huwezi kurithi kutoka kwa madarasa kadhaa mara moja, moja tu. Hapo awali tumeona tayari suluhisho la tatizo hili: badala ya kurithi tumia vitu vikundi moja ndani ya nyingine.
Katika PHP kuna njia nyingine pia. Inajumuisha matumizi ya sifa za ziada. Sifa ya ziada inawakilisha seti ya mali na mbinu ambazo zinaweza kuingizwa kwenye darasa lingine. Wakati huo huo mali na mbinu za sifa ya ziada zitachukuliwa na darasa kana kwamba ni zake.
Syntax ya sifa ya ziada ni sawa na ya darasa,
isipokuwa kwamba jina la sifa ya ziada linahitaji
kutangazwa kwa kutumia neno kuu
trait.
Hawezi kuunda mfano wa sifa ya ziada - sifa za ziada
zinakusudiwa tu kwa kushikamana na madarasa mengine
ya darasa. Uunganishaji lenyewe unafanyika
kwa kutumia amri use, baada ya hapo
kwa nafasi hutajwa jina la sifa ya ziada inayounganishwa.
Amri hii imeandikwa mwanzoni mwa darasa.
Wacha tuone utumiaji wa sifa za ziada kwa kivitendo
mfano. Hebu tuchukulie tuna sifa ya ziada
Helper, iliyo na mali za kibinafsi
name na age, pamoja na wapataji wao:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Hebu tuchukulie pia tuna darasa User,
ambalo kwenye muundaji wake mali
name na age huwekwa:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Hebu sasa tuongeze wapataji kwa mali
ya darasa letu User. Lakini tusiziandike
ndani ya darasa lenyewe, bali tuunganishe
sifa ya ziada Helper, ambayo ndani yake mbinu hizi
tayari zinatekelezwa:
<?php
class User
{
use Helper; // unganisha sifa ya ziada
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Baada ya kuunganisha sifa ya ziada kwenye darasa letu zitaonekana mbinu na mali za sifa hii ya ziada. Wakati huo huo tutaweza kuziwataka kana kwamba ni mbinu na mali za darasa lenyewe:
<?php
$user = new User('john', 30);
echo $user->getName(); // itatoa 'john'
echo $user->getAge(); // itatoa 30
?>
Tekelezea darasa City lenye mali
name, age, population
na wapataji wao. Hebu darasa letu kwa
ukatizo wa msimbo wake litumie tayari
sifa ya ziada Helper tuliyoiunda.