⊗ppOpIhPPP 33 of 107 menu

Privāto īpašību problēma mantojumā OOP PHP

Tas, ka privātās īpašības nemantojas, var izraisīt negaidītu problēmu. Apskatīsim to ar piemēru. Pieņemsim, ka mums ir šāda vecāku klase ar privātu īpašību:

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

Pieņemsim, ka bērna klasē mēs nolēmām izveidot metodi, kas palielinās vecumu par vienu. Tomēr mēģinājums mainīt vecāka privāto īpašību izraisīs kļūdu:

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

Kļūda pazudīs, ja bērna klasē deklarēsiet privāto īpašību $age:

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

Šeit mūs sagaida lamatas! Patiesībā mēs esam radījuši divas privātas īpašības: vienu vecākā klasē un vienu bērna klasē. Un tās darbojas pilnīgi neatkarīgi. Tas nozīmē, ka vecāka metodes mainīs savu īpašību, un bērna metodes - savas.

Šai problēmai patiesībā ir risinājums. Vienkārši ir jāpārvalda vecāka privātās īpašības caur šī vecāka metodēm. Pārrakstīsim mūsu kodu saskaņā ar to:

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

Var vienkāršot:

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

Nākamajā kodā bērna klasē tiek pārdefinēta vecāka metode. Izlabojiet problēmas šajā 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; // kļūda } } } ?>
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt