Você já fez alguma OOP séria usando uma fonte de dados externa que, por algum motivo, fornece dados escondidos em propriedades privadas / protegidas inacessíveis? Existem algumas maneiras de acessar esses dados, e uma delas é a reflexão.
Digamos que você tenha a seguinte aula:
class Kitchen
{
protected $food = "cake";
protected $description = "is a lie";
}
E um exemplo disso:
$kitchen = new Kitchen();
O seguinte define cada membro da classe como público e os importa para a tabela de símbolos atual usando variáveis variáveis, como em PHP extract()
:
$reflectHaxx = new ReflectionObject($kitchen);
$parsHaxx = $reflectHaxx->getProperties();
foreach ($parsHaxx as $p)
{
// Get each property one by one...
$property = $reflectHaxx->getProperty($p->name);
// Set it to accessible
$property->setAccessible('true');
// Variable variable name and value declaration
${$p->name} = $property->getValue($kitchen);
}
Agora, você pode acessar $food
e $description
assim:
// Hint: prints "The cake is a lie!"
printf('The %s %s!', $food, $description);
Só porque você pode fazer algo, entretanto, não significa que você deve ; mas se você se encontrar na situação em que os dados fornecidos simplesmente não têm o modificador de acesso correto, experimente a reflexão.
Este post foi inspirado no post de Ocramius , que mostra um método diferente para o PHP 5.4.