⊗ppOpIhPPP 33 of 107 menu

Problemi i vetive private në trashëgiminë në OOP në PHP

Fakti që vetitë private nuk trashëgohen, mund të çojë në një problem të papritur. Le të shohim një shembull. Le të themi se kemi klasën prind të mëposhtme me një veti private:

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

Le të themi se në klasën e bijës kemi vendosur të bëjmë një metodë që do të rrisë moshën me një. Megjithatë, përpjekja për të ndryshuar vetinë private të prindit do të çojë në gabim:

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

Gabimi do të zhduket nëse në klasën e bijës deklarohet vetia private $age:

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

Këtu na pret kurtha! Në realitet ne kemi krijuar dy veti private: një në prind dhe një në bijë. Dhe ato punojnë plotësisht të pavarura. Kjo do të thotë që metodat e prindit do të ndryshojnë vetinë e tyre, dhe metodat e bijës - vetitë e tyre.

Ky problem në fakt ka zgjidhje. Thjesht duhet të manipuloni vetitë private të prindit përmes metodave të atij prindi. Le të rishkruajmë kodin tonë në përputhje me këtë:

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

Mund të thjeshtohet:

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

Në kodin e mëposhtëm në klasën e bijës ridohet metoda e prindit. Korrigjoni problemet në këtë kod:

<?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; // gabim } } } ?>
Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo