⊗ppOpFnMt 64 of 107 menu

PHP да ООПда абстракт методлар

Абстракт класслар шунингдек абстракт методларни ўз ичига олиши мумкин. Бундай методлар амалга оширилиши шарт эмас, балки ўша методлар авлодларда бўлиши кераклигини кўрсатиш учун керак. Ва ⁅i⁆бундай методларни амалга ошириш авлодларнинг вазифаси⁅/i⁆.

Методни абстракт деб эълон килиш учун, уни эълон килишда abstract калит сузи ёзилади.

Келинг амалиётда синайлик. Фарз килайлик, User класснинг барча авлодлари increaseRevenue методага эга бўлиши керак.

Бу метод фойдаланувчининг жорий даромадини олиб, уни параметр орқали ўтказилган маълум миқдорга кўпайтириши керак.

User классининг ўзи билмайди, авлод қандай даромад олишини - axoli чунки ишчининг маоши, талабаники эса стипендия. Шу сабабдан ҳар бир авлод бу методни ўз йўли билан амалга оширади.

Бу ердаги моҳият шундаки, User класснинг абстракт метода диллагерни авлодларда бу методни амалга оширишга мажбурлайди, акс ҳолда PHP хато чиқаради. Шу тариқа сиз ёки сизнинг кодингиз билан ишлаётган бошқа диллагер авлодда керакли методни амалга оширишни ҳеч қандай ҳолда унута олмайсиз.

Демак, келинг амалиётда синайлик. User классга increaseRevenue абстракт методани қўшайлик:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Танасиз абстракт метод: abstract public function increaseRevenue($value); } ?>

Бизнинг Employee классимиз ўзгартиришсиз қолсин. Бу ҳолатда, агар Employee класси объектини яратмасангиз ҳам, фақат бизнинг классларимиз аниқланган кодни ишга туширсангиз - PHP хато чиқаради.

Энди Employee классида increaseRevenue методани амалга оширишни ёзайлик:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Методни амалга оширишни ёзамиз: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Бизнинг класс ишлашини текширамиз:

<?php $employee = new Employee; $employee->setName('john'); $employee->setSalary(1000); $employee->increaseRevenue(100); echo $employee->getSalary(); ?>

increaseRevenue методани Student классида ҳам амалга оширамиз. Фақат энди бизнинг методамиз стипендияни кўпайтиради:

<?php class Student extends User { private $scholarship; // стипендия public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Метод стипендияни кўпайтиради: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

User классингизга шунинг increaseRevenue абстракт методани қўшинг. Бу методни амалга оширишни Employee ва Student классларида ёзинг.

Figure классида фигуранинг юзаси ва периметрини олиш учун абстракт методлар яратинг.

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