⊗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.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне