АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppOpTrInr 77 of 107 menu

Трэйты ў ААП у 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.

byenru