⊗ppOpIhPPP 33 of 107 menu

Tatizo la Sifa za Kibinafsi Wakati wa Kurithi katika OOP katika PHP

Kukosa sifa za kibinafsi kurithiwa, kinaweza kusababisha tatizo lisilotarajiwa. Tuangalie kwa mfano. Tuchukulie tuna kitabu kizazi mzazi chenye sifa ya kibinafsi ifuatayo:

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

Tuchukulie katika kitabu kizazi mtoto tuliamua kutengeneza njia, ambayo itaongeza umri kwa moja. Hata hivyo, jaribio la /kubadilisha sifa ya kibinafsi ya mzazi litasababisha hitilafu:

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

Hitilafu itatoweka, ikiwa katika kitabu kizazi mtoto kitatangaza sifa ya kibinafsi $age:

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

Hapo ndipo tunakabiliwa na mtego! Kweli sisi tulizaa sifa mbili za kibinafsi: moja kwenye mzazi na moja kwenye mtoto. Na zinafanya kazi kikamilifu kwa kujitegemea. Hii inamaanisha, kwamba njia za mzazi zitabadilisha sifa zake, na njia za mtoto - zake.

Tatizo hili kweli lina ufumbuzi. Ni lazima tuwasilishe sifa za kibinafsi za mzazi kupitia njia za mzazi huyo. Tuandike tena msimbo wetu kulingana na hili:

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

Inaweza kurahisishwa:

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

Katika msimbo ufuatao kwenye kitabu kizazi mtoto njia ya mzazi inafafanuliwa upya. Sahihisha matatizo kwenye msimbo huu:

<?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; // hitilafu } } } ?>
Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa