⊗ppOpIhPPP 33 of 107 menu

PHPдеги ООПде мурас берүү убагында жеке касиеттердин көйгөйү

Жеке касиеттер мурасталбайт деген факт күтүлбөгөн көйгөйгө алып келиши мүмкүн. Мисал үчүн карап көрөлү. Бизде төмөнкүдөй жеке касиеттүү ата-эне классы бар деп коёлу:

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

Балдар класcында биз жашты бирге көбөйтүүчү ыкма жасоону чечтик деп коёлу. Бирок, ата-эненин жеке касиетин өзгөртүүгө аракет кылуу катага алып келет:

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

Эгерде балдар класcында жеке касиет $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); } } ?>

Төмөнкү коддо балдар класcында ата-эне ыкмасы кайра аныкталат. Бул коддогу көйгөйлөрдү оңдогула:

<?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 файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу