⊗ppOpIfII 74 of 107 menu

PHP да ООП да синфдан мерос олиш ва интерфейсни амалга ошириш

Синф бошқа синфдан мерос олиши мумкин ва шу билан бирга кайсидир интерфейсни амалга ошириши мумкин. Амалий мисолда кўриб чиқайлик.

Фарз қилайлик, биз Programmer синфини яратишни истаймиз, унда исм, маош ва дастурчи билган тиллар рўйхати бўлади. Ҳозирча бизнинг синф тавсифимиз жуда номаълум: ҳа, синфда исм, маош, тиллар бўлади - лекин бизнинг синфимизда қандай методлар бўлади?

Келинг, бизнинг синфимизни iProgrammer интерфейси орқали аниқроқ тавсифлаймиз:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Фарз қилайлик, биз аллақачон амалга оширилган синфларимизни текширдик ва, маълум бўлдики, бизда ўхшаш Employee синфи мавжуд. У Programmer синфининг ҳамма методларини эмас, бирок бир қисмини амалга оширади. Бизда мавжуд бўлган синфнинг коди:

<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>

Бизнинг ҳолатимизда, Programmer синфимиз Employee синфидан ўзига керак бўлган методларнинг бир қисмини мерос олиши (қолган қисмини эса кейин янги синфнинг ўзида амалга оширамиз) мақул кўринади:

<?php class Programmer extends Employee { } ?>

Шу билан бирга, Programmer синфи iProgrammer интерфейсини амалга ошириши кераклиги маълум:

<?php class Programmer implements iProgrammer { } ?>

Келинг, Employee синфидан мерос олиш ва iProgrammer интерфейсини амалга оширишни бирлаштирайлик:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Натижада, бизнинг Programmer синфимиз Employee синфидан __construct, getName ва getSalary методларини мерос олади, addLang ва getLangs методларини эса биз амалга оширишимиз керак бўлади:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // амалга ошириш } public function getLangs() { // амалга ошириш } } ?>

iProgrammer интерфейси учун методлар асосий синфда ёки мерос олинган бўлиши муҳим эмас - асосийси, ҳамма тавсифланган методлар амалга оширилган бўлиши керак.

Менинг Employee синфим ва iProgrammer интерфейсимнинг кодидан нусха олинг. Менинг Programmer синфим учун тайёрловкимдан нусха олмангиз - менинг кодга қарамай, бу синфни ўзингиз амалга оширинг.

Ўзбек
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
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш