⊗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ščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј