⊗ppOpMgROP 89 of 107 menu

Proprietăți doar pentru citire în OOP în PHP

Să analizăm o clasă în care toate proprietățile sunt private:

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

Acum să facem astfel încât aceste proprietăți în lumea exterioară să fie accesibile doar pentru citire. Am făcut deja acest lucru anterior, creând getteri pentru fiecare proprietate și necreând setteri.

Acum să folosim pentru rezolvarea acestei probleme metoda magică __get. Vom returna în ea valoarea proprietății solicitate. Cum să facem acest lucru: numele proprietății solicitate ajunge în parametrul metodei __get, în cazul nostru $property.

Aceasta înseamnă că putem citi proprietatea, al cărei nume este stocat în variabilă, astfel: $this->$property (numele proprietății va fi variabilă, adică cu dolar la început, noi am studiat acest lucru în lecțiile anterioare).

Să creăm metoda descrisă __get:

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

Să o folosim pentru citirea proprietăților:

<?php $test = new Test; echo $test->prop1; // va afișa 1 echo $test->prop2; // va afișa 2 ?>

Încercarea de a scrie ceva în proprietate va duce la eroare:

<?php $test = new Test; $test->prop1 = 2; // va da eroare ?>

Acesta este exact ceea ce avem nevoie: proprietatea poate fi citită, dar nu poate fi scrisă.

Încercarea de a citi o proprietate inexistentă va da eroare:

<?php $test = new Test; echo $test->prop3; // va da eroare ?>

Atenție și la următoarea nuanță: când făceam proprietățile doar pentru citire prin metoda veche, pentru a citi proprietatea, foloseam o metodă-getter.

În metoda nouă vom accesa direct proprietățile, ca și cum ar fi publice. Dar nu vom putea scrie în ele, ca și cum ar fi private.

Să presupunem că avem următoarea clasă User, ale cărei proprietăți sunt accesibile doar pentru citire cu ajutorul getterilor:

<?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; } } ?>

Refaceți codul acestei clase astfel încât în loc de getteri să fie folosită metoda magică __get.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge