⊗ppOpMgGP 88 of 107 menu

Obținerea proprietăților prin magie în OOP în PHP

Următoarea metodă magică pe care o vom analiza se numește __get. Această metodă se activează la încercarea de a citi valoarea unei proprietăți private sau protejate.

Dacă implementăm metoda __get într-o clasă, toate accesările la proprietăți inexistente sau ascunse vor fi gestionate de această metodă.

În acest caz, PHP va transmite automat numele proprietății solicitate în primul parametru al acestei metode, iar valoarea returnată de această metodă va fi percepută ca valoarea proprietății la care s-a făcut accesarea.

Probabil încă nu este foarte clar cum funcționează acest lucru, așa că să analizăm un exemplu practic. Să presupunem că avem următoarea clasă Test cu proprietăți private și publice:

<?php class Test { public $prop1 = 1; // proprietate publică private $prop2 = 2; // proprietate privată } ?>

Să adăugăm în clasa noastră metoda magică __get, care pentru început va doar returna numele proprietății la care s-a făcut accesarea:

<?php class Test { public $prop1 = 1; private $prop2 = 2; public function __get($property) { return $property; // doar returnăm numele proprietății } } ?>

Să verificăm funcționarea metodei magice create. Accesăm trei tipuri de proprietăți: o proprietate publică, una privată și una inexistentă:

<?php $test = new Test; // Accesăm proprietatea publică: echo $test->prop1; // va afișa 1 - adică valoarea proprietății // Accesăm proprietatea privată: echo $test->prop2; // va afișa 'prop2' - numele proprietății // Accesăm proprietatea inexistentă: echo $test->prop3; // va afișa 'prop3' - numele proprietății ?>

După cum vedeți, metoda noastră magică reacționează la accesarea proprietăților private și inexistente, dar ignoră accesarea la cele publice - acestea funcționează așa cum au funcționat întotdeauna.

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