⊗ppOpIhPPP 33 of 107 menu

PHP да ООП да мерос хосил килишда хусусий хусусиятлар муаммоси

Хусусий хусусиятлар мерос хосил килинмаслиги кутилмаган муаммога олиб келиши мумкин. Келинг, мисолда кўрамиз. Фарз килайлик, бизда куйидаги хусусий хусусиятга эга ота-она синфи мавжуд:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

Фарз килайлик, мерос олган синфда биз ёшни биттага оширадиган метод ясамоқчи бўлдик. Аммо, ота-онанинг хусусий хусусиятини ўзгартиришга уриниш хатоликка олиб келади:

<?php class Student extends User { public function incAge() { $this->age++; // хатолик } } ?>

Хатолик йўқолади, агар мерос олган синфда хусусий хусусият $age эълон килинса:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

Ана ўша жойда бизни таўққати кутмоқда! Аслода биз иккита хусусий хусусиятни яратдик: бири ота-онада ва иккинчиси мерос олган синфда. Ва улар бир-биридан мустакил ишлайди. Бу шунни англатадики, ота-она методлари ўз хусусиятларини ўзгартиради, мерос олган синф методлари эса ўзлариникини.

Бу муаммо аслода ечимга эга. Жуда содда, хусусий хусусиятлар билан ота-онанинг методлари орқали ишлаш керак. Келинг, кодимизни буга мувофик қайта ёзайлик:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

Соддалаштириш мумкин:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

Куйидаги кодда мерос олган синфда ота-она методи қайта аникланади. Ушбу кодаги муаммоларни тузатинг:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // хатолик } } } ?>
Ўзбек
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
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш