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:

Test.php<?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:

Test.php<?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:

index.php<?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.