objetos dinâmicos em PHP

É possível criar objetos dinâmicos em PHP, quero dizer, criar objetos sem criar uma classe antes. Para isso, podemos utilizar a stdClass (Standard Class).

Você pode até criar um objeto direto pelas propriedades, por exemplo:

$objeto->propriedade = 'valor';

Porém, você vai ver um erro de aviso quando fizer isso.

Se precisar criar objetos diretamente, o mais correto é criar uma instância da stdClass. Veja:

<?php
// Primeiro objeto
$luiz            = new stdClass();
$luiz->nome      = 'Luiz Otávio';
$luiz->sobrenome = 'Miranda';
$luiz->idade     = 27;
$luiz->profissao = 'Desenvolvedor';

// Segundo objeto
$jose            = new stdClass();
$jose->nome      = 'José';
$jose->sobrenome = 'silva';
$jose->idade     = 33;
$jose->profissao = 'Analista de Sistemas';

// Função para percorrer o objeto e mostrar os dados
function mostra_dados ( $objeto ) {
	// Laço
	foreach ( $objeto as $propriedade => $valor ) {
		// Mostra
		echo ucfirst( $propriedade ) . ' = ' . $valor . '<br>';
	}
}

// Mostra primeiro objeto
mostra_dados( $luiz );
echo '<br>';

// Mostra segundo objeto
mostra_dados( $jose );
?>

Você não terá métodos nos objetos criados dinamicamente, apenas propriedades.

Propriedades dinâmicas em classes PHP

Também é possível criar propriedades dinamicamente em qualquer classe PHP, para isso, simplesmente utilize a seguinte forma:

$objeto->propriedade = 'valor';

Veja um exemplo completo:

<?php
// Cria uma classe comum sem propriedades
class Dinamica
{
	// Um método que exibe as propriedades dinâmicas
	public function obter_propriedades () {
		// get_object_vars obtém todas as propriedades da classe
		$propriedades = get_object_vars( $this );
		
		foreach ( $propriedades as $propriedade => $valor ) {
			echo "{$propriedade} = {$valor}<br>";
		}
	}
}

// Instância (objeto)
$dinamica = new Dinamica();

// Cria propriedades
$dinamica->propriedade1 = 'Propriedade 1';
$dinamica->propriedade2 = 'Propriedade 2';
$dinamica->propriedade3 = 'Propriedade 3';

// Exibe as propriedades criadas
$dinamica->obter_propriedades();
?>

Como resultado teremos:

propriedade1 = Propriedade 1
propriedade2 = Propriedade 2
propriedade3 = Propriedade 3

Perceba que utilizei a função get_object_vars para obter as propriedades criadas dinamicamente.

Concluindo

Objetos e propriedades dinâmicas em PHP podem ser bastante úteis dependendo da ação que seu código vai realizar. Utilize sabiamente.

Não deixe de seguir todas as aulas do nosso curso gratuito de PHP e de PHP Orientado a Objetos.

Caso tenha dúvidas, não hesite em comentar.