stdClass em PHP: a magia do objeto vazio
Se você já programou em PHP, provavelmente já se deparou com uma situação: você precisa criar um objeto rapidamente, mas não tem uma classe pronta. Ou você recebe dados do banco de dados, e eles vêm como um objeto, mas você não entende de onde vêm as propriedades. Familiar? Bem-vindo ao mundo do stdClass — a classe embutida do PHP que funciona como um "contêiner vazio" para dados.
Neste artigo, vamos explorar o que é stdClass, para que serve, como criá-lo e usá-lo. Você aprenderá como ele difere de um array comum e obterá exemplos práticos que pode aplicar imediatamente no código. Vamos lá!
O que é stdClass?
stdClass (abreviação de "standard class") é uma classe vazia embutida no PHP. Ela não possui métodos, propriedades ou comportamento predefinido. Ela existe apenas para que você possa criar um objeto "em tempo real" sem escrever sua própria classe.
Simplificando, é um objeto anônimo que pode ser preenchido com propriedades a qualquer momento. Se você já escreveu $obj = new stdClass();, então já o usou.
<?php$obj = new stdClass();$obj->name = "Alexei";$obj->age = 28;echo $obj->name; // Exibe: Alexei?>Neste exemplo, criamos um objeto stdClass e adicionamos dinamicamente duas propriedades a ele. Nenhuma classe precisa ser declarada previamente — o PHP cria tudo sozinho.
Para que serve o stdClass?
À primeira vista, pode parecer que stdClass é uma gambiarra. Por que usar um objeto se você pode usar um array? Na verdade, ele tem vários usos importantes:
- Trabalho com JSON. Quando você decodifica JSON com
json_decode()sem o segundo argumento, o PHP retorna um objetostdClass. Este é o comportamento padrão. - Estruturas de dados temporárias. Se você precisa passar rapidamente um conjunto de dados como um objeto (por exemplo, para uma função que espera um objeto),
stdClassé a escolha ideal. - Compatibilidade com API. Muitas bibliotecas e frameworks esperam objetos, não arrays.
stdClasspermite que você se adapte facilmente. - Prototipagem. Quando você está escrevendo um protótipo e não quer perder tempo criando uma classe completa,
stdClassé uma salvação.
É importante entender: stdClass não foi projetado para lógica complexa. Se você precisa de métodos, herança ou encapsulamento, crie sua própria classe.
Como criar um objeto stdClass?
Você pode criar um objeto stdClass de várias maneiras. Vamos ver cada uma.
1. Através do operador new
A maneira mais óbvia é usar new stdClass():
<?php$user = new stdClass();$user->name = "Maria";$user->email = "maria@example.com";?>2. A partir de JSON
Ao decodificar JSON com json_decode() (sem a flag true), você obtém um stdClass:
<?php$json = '{"name":"Ivan","age":30}';$obj = json_decode($json);echo $obj->name; // Ivanecho get_class($obj); // stdClass?>3. Type casting (conversão de tipo)
Você pode converter um array em um objeto usando (object):
<?php$array = ["name" => "Olga", "city" => "Moscou"];$obj = (object) $array;echo $obj->city; // Moscou?>Observe: ao converter um array com chaves numéricas, as chaves se tornam inacessíveis (o PHP as transforma em propriedades, mas você precisará usar chaves para acessá-las).
stdClass vs array: qual escolher?
Esta é uma questão eterna. Vamos comparar: