⊗ppOpMgROP 89 of 107 menu

Propiedades de solo lectura en POO en PHP

Consideremos una clase en la que todas las propiedades son privadas:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

Ahora hagamos que estas propiedades en el mundo exterior sean accesibles solo para lectura. Anteriormente ya hicimos esto, creando getters para cada propiedad y sin crear setters.

Ahora resolvamos esta tarea utilizando el método mágico __get. Devolveremos en él el valor de la propiedad solicitada. Cómo hacerlo: el nombre de la propiedad solicitada llega al parámetro del método __get, en nuestro caso $property.

Esto significa que podemos leer la propiedad, cuyo nombre está almacenado en una variable, así: $this->$property (el nombre de la propiedad será una variable, es decir, con un dólar al principio, esto lo estudiamos en lecciones anteriores).

Hagamos el método __get descrito:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Utilicémoslo para leer las propiedades:

<?php $test = new Test; echo $test->prop1; // mostrará 1 echo $test->prop2; // mostrará 2 ?>

El intento de escribir algo en la propiedad llevará a un error:

<?php $test = new Test; $test->prop1 = 2; // dará un error ?>

Esto es exactamente lo que necesitamos: la propiedad se puede leer, pero no se puede escribir.

El intento de leer una propiedad inexistente dará un error:

<?php $test = new Test; echo $test->prop3; // dará un error ?>

También presten atención al siguiente matiz: cuando hacíamos propiedades de solo lectura de la manera antigua, para leer la propiedad, usábamos un método getter.

En la nueva forma, nos dirigiremos precisamente a las propiedades, como si fueran públicas. Pero no podremos escribir en ellas, como si fueran privadas.

Supongamos que se da la siguiente clase User, cuyas propiedades son accesibles solo para lectura mediante getters:

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

Rehagan el código de esta clase para que en lugar de getters se use el método mágico __get.

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