Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗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 файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу