Desde muito tempo atrás, o PHP suporta o recurso muito interessante, porém, de conversão de objeto em array por meio de conversão simples via (array)
:
<?php
class Foo {
public $bar = 'barValue';
}
var_dump((array) new Foo());
Você pode ver um exemplo de execução em http://3v4l.org/FC3WT
Isso nos permite aplicar conversões rápidas ao serializar dados em JSON ou XML, por exemplo.
Estranhamente, também nos permite recuperar propriedades privadas e protegidas:
<?php
class Foo {
public $bar = 'barValue';
protected $baz = 'bazValue';
private $tab = 'tabValue';
}
var_dump((array) new Foo());
Um exemplo ao vivo está em http://3v4l.org/sGnfO
As chaves para valores privados e protegidos são bastante estranhas:
- Para valores protegidos, a chave é
" * $propertyName"
- Para valores privados, a chave é
" $classFQCN $propertyName"
Você pode ver uma rápida demonstração em http://3v4l.org/6o7Ac
Embora isso possa não fazer sentido para muitas pessoas, é assim que o PHP realmente representa os objetos internamente, e é pensado dessa forma para evitar colisões na serialização de objetos.
Use com cuidado – viola claramente os princípios OOP
Escrevi mais extensivamente sobre o tópico em http://ocramius.github.io/blog/fast-php-object-to-array-conversion/