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