⊗ppOpTrInr 77 of 107 menu

Traitit OOP:ssa PHP:ssä

Kuten jo tiedät, PHP:ssä ei voi periä useasta luokasta kerralla, vain yhdestä. Aikaisemmin olemme jo käsitelleet ratkaisua tähän ongelmaan: perinnän sijasta käytetään objektia yhteen luokkaan toisten sisällä.

PHP:ssä on toinen tapa. Se perustuu traitien käyttöön. Trait edustaa ominaisuuksien ja menetelmien kokoelmaa, jotka voidaan liittää toiseen luokkaan. Tällöin ominaisuudet ja traitin menetelmät koetaan luokassa ikään kuin omikseen.

Traitin syntaksi on sama kuin luokalla, poikkeuksena, että traitin nimi on ilmoitettava avainsanalla trait.

Traitista ei voi luoda instanssia - traitit on tarkoitettu vain liitettäväksi toisiin luokkiin. Itse liittäminen toteutetaan komennolla use, jonka jälkeen välilyönnillä erotettuna ilmoitetaan liitettävän traitin nimi. Tämä komento kirjoitetaan luokan alkuun.

Katsotaan traitien käyttöä käytännön esimerkissä. Oletetaan, että meillä on seuraava trait Helper, joka sisältää yksityiset ominaisuudet name ja age, sekä niiden getterit:

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

Oletetaan, että meillä on myös seuraava luokka User, jonka konstruktorissa asetetaan ominaisuudet name ja age:

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

Lisätään nyt getterit luokkamme User ominaisuuksille. Mutta älkäämme kirjoittako niitä itse luokkaan, vaan yksinkertaisesti liitetään trait Helper, jossa nämä menetelmät on jo toteutettu:

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

Traitin liittämisen jälkeen luokkaamme ilmestyvät traitin menetelmät ja ominaisuudet. Tällöin viittaamme niihin ikään kuin ne olisivat luokan omia menetelmiä ja ominaisuuksia:

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

Toteuta luokka City, jossa on ominaisuudet name, age, population ja getterit niille. Olkoon luokkamme lyhentääkseen koodiaan käyttää jo luomaamme traitia Helper.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää