⊗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çeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау