⊗ppOpIhPPP 33 of 107 menu

O problema das propriedades privadas na herança em OOP no PHP

O fato de que propriedades privadas não são herdadas pode levar a um problema inesperado. Vamos ver um exemplo. Suponha que temos a seguinte classe pai com uma propriedade privada:

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

Suponha que na classe filha decidimos criar um método que aumentará a idade em um. No entanto, a tentativa de alterar a propriedade privada do pai resultará em um erro:

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

O erro desaparecerá se na classe filha declararmos a propriedade privada $age:

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

É aqui que nos deparamos com uma armadilha! Na verdade, criamos duas propriedades privadas: uma no pai e uma na filha. E elas funcionam completamente de forma independente. Isso significa que os métodos do pai alterarão sua própria propriedade, e os métodos da filha - a sua.

Este problema na verdade tem solução. Basta manipular as propriedades privadas do pai através dos métodos desse pai. Vamos reescrever nosso código de acordo com isso:

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

Pode ser simplificado:

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

No código a seguir, na classe filha, o método do pai é sobrescrito. Corrija os problemas neste código:

<?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; // erro } } } ?>
Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar