⊗ppOpIhPPP 33 of 107 menu

Problema de las propiedades privadas en la herencia de POO en PHP

El hecho de que las propiedades privadas no se hereden puede llevar a un problema inesperado. Veamos un ejemplo. Supongamos que tenemos la siguiente clase padre con una propiedad privada:

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

Supongamos que en la clase hija decidimos crear un método que incrementará la edad en uno. Sin embargo, el intento de cambiar la propiedad privada del padre conducirá a un error:

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

El error desaparecerá si en la clase hija declaramos la propiedad privada $age:

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

¡Aquí es donde nos espera la trampa! En realidad, hemos creado dos propiedades privadas: una en el padre y una en el hijo. Y funcionan completamente de forma independiente. Esto significa que los métodos del padre modificarán su propiedad, y los métodos del hijo - la suya.

Este problema en realidad tiene solución. Simplemente hay que manipular las propiedades privadas del padre a través de los métodos de ese padre. Reescribamos nuestro código de acuerdo con esto:

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

Se puede simplificar:

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

En el siguiente código, en la clase hija se redefine un método del padre. Corrija los problemas en este 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; // error } } } ?>
Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar