⊗ppOpTrInr 77 of 107 menu

Traity v OOP v PHP

Jak již víte, v PHP nelze dědit z více tříd najednou, pouze z jedné. Dříve jsme již probírali řešení tohoto problému: místo dědičnosti používat objekty jedněch tříd uvnitř jiných.

V PHP existuje i jiný způsob. Spočívá v použití traitů. Trait představuje soubor vlastností a metod, které lze zahrnout do jiné třídy. Přitom vlastnosti a metody traitu budou třídou vnímány jako by byly její vlastní.

Syntaxe traitu je stejná jako u třídy, s výjimkou toho, že název traitu je třeba deklarovat pomocí klíčového slova trait.

Instanci traitu nelze vytvořit - traity jsou určeny pouze pro připojení k jiným třídám. Samotné připojení se provádí pomocí příkazu use, za kterým je mezerou uveden název připojovaného traitu. Tento příkaz se píše na začátku třídy.

Podívejme se na použití traitů na praktickém příkladu. Předpokládejme, že máme daný tento trait Helper, obsahující privátní vlastnosti name a age, a také jejich gettery:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

Předpokládejme, že máme také tuto třídu User, v jejímž konstruktoru jsou nastaveny vlastnosti name a age:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Nyní přidejme gettery pro vlastnosti naší třídy User. Ale nezapisujme je přímo do třídy, místo toho pouze připojme trait Helper, ve kterém jsou tyto metody již implementovány:

<?php class User { use Helper; // připojujeme trait public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Po připojení traitu se v naší třídě objeví metody a vlastnosti tohoto traitu. Přitom k nim budeme přistupovat, jako by to byly metody a vlastnosti samotné třídy:

<?php $user = new User('john', 30); echo $user->getName(); // vypíše 'john' echo $user->getAge(); // vypíše 30 ?>

Implementujte třídu City s vlastnostmi name, age, population a gettery pro ně. Nechť naše třída pro zkrácení svého kódu používá již vytvořený trait Helper.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout