⊗ppOpTrInr 77 of 107 menu

Traity w OOP w PHP

Jak już wiesz, w PHP nie można dziedziczyć od wielu klas jednocześnie, tylko od jednej. Wcześniej poznaliśmy już rozwiązanie tego problemu: zamiast dziedziczenia używać obiektów jednych klas wewnątrz innych.

W PHP istnieje inny sposób. Polega on na użyciu traitów. Trait reprezentuje sobie zbiór właściwości i metod, które można dołączyć do innej klasy. Przy tym właściwości i metody traita będą postrzegane przez klasę jako swoje.

Składnia traita jest taka sama jak klasy, z wyjątkiem tego, że nazwę traita należy deklarować za pomocą słowa kluczowego trait.

Nie można utworzyć instancji traita - traity są przeznaczone tylko do podłączania do innych klas. Samo podłączenie odbywa się za pomocą komendy use, po której przez spację podaje się nazwę podłączanego traita. Ta komenda jest zapisywana na początku klasy.

Przyjrzyjmy się zastosowaniu traitów na praktycznym przykładzie. Załóżmy, że mamy dany taki trait Helper, zawierający prywatne właściwości name i age, a także ich gettery:

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

Załóżmy, że mamy również taką klasę User, w konstruktorze której ustawiane są właściwości name i age:

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

Dodajmy teraz gettery dla właściwości naszej klasy User. Tylko nie zapisujmy ich w samej klasie, a po prostu podłączmy trait Helper, w którym te metody są już zaimplementowane:

<?php class User { use Helper; // podłączamy trait public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Po podłączeniu traita w naszej klasie pojawią się metody i właściwości tego traita. Przy tym odwoływać się do nich będziemy jak do metod i właściwości samej klasy:

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

Zaimplementuj klasę City z właściwościami name, age, population i getterami dla nich. Niech nasza klasa dla skrócenia swojego kodu użyje już stworzonego przez nas traita Helper.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć