Haxx seu caminho nas propriedades privadas de uma classe

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 $foode $descriptionassim:

// 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.