⊗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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј