Obtendo propriedades através de magia em OOP no PHP

O próximo método mágico que vamos analisar é chamado __get. Este método é acionado ao tentar ler o valor de uma propriedade privada ou protegida.

Se o método __get for implementado em alguma classe, todos os acessos a propriedades inexistentes ou ocultas serão tratados por este método.

Nesse caso, o PHP automaticamente passará o nome da propriedade solicitada no primeiro parâmetro deste método, e o valor retornado por este método será interpretado como o valor da propriedade que foi acessada.

Provavelmente ainda não está muito claro como isso funciona, então vamos ver um exemplo prático. Suponha que temos a seguinte classe Test com uma propriedade privada e uma pública:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // propriedade pública
    private $prop2 = 2; // propriedade privada
  }
?>

Vamos adicionar à nossa classe o método mágico __get, que inicialmente vai simplesmente retornar o nome da propriedade que foi acessada:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // simplesmente retorna o nome da propriedade
    }
  }
?>

Vamos testar o funcionamento do método mágico criado. Vamos acessar três tipos de propriedades: uma propriedade pública, uma privada e uma inexistente:

index.php<?php
  $test = new Test;
  
  // Acessando uma propriedade pública:
  echo $test->prop1; // exibirá 1 - ou seja, o valor da propriedade
  
  // Acessando uma propriedade privada:
  echo $test->prop2; // exibirá 'prop2' - o nome da propriedade
  
  // Acessando uma propriedade inexistente:
  echo $test->prop3; // exibirá 'prop3' - o nome da propriedade
?>

Como você pode ver, nosso método mágico reage ao acesso de propriedades privadas e inexistentes, mas ignora o acesso às propriedades públicas - elas funcionam como funcionavam antes.