Трэйты ў ААП у PHP
Як вы ўжо ведаеце, у PHP нельга наследоваць ад некалькіх класаў адразу, толькі ад аднаго. Раней мы ўжо праходзілі рашэнне гэтай праблемы: замест наследавання выкарыстоўваць аб'екты адных класаў унутры іншых.
У PHP ёсць і іншы спосаб. Ён заключаецца ў выкарыстанні трэйтаў. Трэйт уяўляе сабой набор уласцівасцей і метадаў, якія можна ўключыць у іншы клас. Пры гэтым уласцівасці і метады трэйта будуць успрымацца класам быццам свае.
Сінтаксіс трэйта такі ж як і ў класа,
за выключэннем таго, што імя трэйта трэба
аб'яўляць з дапамогай ключавога
слова trait
.
Экземпляр трэйта нельга стварыць - трэйты
прызначаны толькі для падлучэння да іншых
класаў. Само падлучэнне ажыццяўляецца
з дапамогай каманды use
, пасля якой
праз прабел паказваецца імя падлучаемага
трэйта. Даная каманда пішацца ў пачатку класа.
Давайце паглядзім прымяненне трэйтаў на практычным
прыкладзе. Хай у нас даны вось такі трэйт
Helper
, які змяшчае прыватныя ўласцівасці
name
і age
, а таксама іх гетэры:
<?php
trait Helper
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Хай у нас таксама ёсць вось такі клас User
,
у канструктары якога задаюцца ўласцівасці
name
і age
:
<?php
class User
{
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Давайце цяпер дадамо гетэры для ўласцівасцей
нашага класа User
. Толькі не будзем
іх запісваць у самым класе, а проста падключым
трэйт Helper
, у якім гэтыя метады
ўжо рэалізаваны:
<?php
class User
{
use Helper; // падключаем трэйт
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
Пасля падлучэння трэйта ў нашым класе з'явяцца метады і ўласцівасці гэтага трэйта. Пры гэтым звяртацца мы да іх будзем быццам да метадаў і ўласцівасцей самога класа:
<?php
$user = new User('john', 30);
echo $user->getName(); // выведзе 'john'
echo $user->getAge(); // выведзе 30
?>
Рэалізуйце клас City
з уласцівасцямі
name
, age
, population
і гетэрамі для іх. Хай наш клас для
скарачэння свайго кода выкарыстоўвае ўжо створаны
нами трэйт Helper
.