⊗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 чиқади ?>

name, age, population хусусиятлари ва улар учун геттерлари бор City классингизни амалга оширинг. Кодни қисқартириш учун бизнинг классимиз аллакача яратилган Helper трейтини ишлатсин.

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