Accesso alle proprietà tramite magia in OOP in PHP
Il prossimo metodo magico che esploreremo
si chiama __get. Questo
metodo viene attivato quando si tenta di leggere il valore
di una proprietà privata o protetta.
Se si implementa il metodo __get in una
classe, tutti gli accessi a proprietà inesistenti
o nascoste saranno gestiti
da questo metodo.
In questo caso PHP passerà automaticamente il nome della proprietà richiesta nel primo parametro di questo metodo, e il valore restituito da questo metodo sarà interpretato come il valore della proprietà a cui si è tentato di accedere.
Probabilmente non è ancora molto chiaro come funzioni,
quindi diamo un'occhiata a un esempio pratico.
Supponiamo di avere una classe Test con una proprietà
privata e una pubblica:
<?php
class Test
{
public $prop1 = 1; // proprietà pubblica
private $prop2 = 2; // proprietà privata
}
?>
Aggiungiamo alla nostra classe il metodo magico
__get, che per cominciare si limiterà a
restituire il nome della proprietà a cui si è tentato di
accedere:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // restituisce semplicemente il nome della proprietà
}
}
?>
Verifichiamo il funzionamento del metodo magico creato. Accediamo a tre tipi di proprietà: una proprietà pubblica, una privata e una inesistente:
<?php
$test = new Test;
// Accediamo alla proprietà pubblica:
echo $test->prop1; // visualizzerà 1 - cioè il valore della proprietà
// Accediamo alla proprietà privata:
echo $test->prop2; // visualizzerà 'prop2' - il nome della proprietà
// Accediamo a una proprietà inesistente:
echo $test->prop3; // visualizzerà 'prop3' - il nome della proprietà
?>
Come puoi vedere, il nostro metodo magico reagisce all'accesso a proprietà private e inesistenti, ma ignora l'accesso a quelle pubbliche - queste continuano a funzionare come prima.