Palavras-chave: PHP, vetor, array, objeto, index
Este trecho de código abaixo é muito útil pois é um modelo de como converter vetores (arrays) em objetos no PHP.
O funcionamento é bastante simples, ele pega um array indexado e o converte em um objeto onde os índices do array serão os nomes das propriedades dos objetos, e o valor do array naquela posição (índice), será o valor da propriedade. O segredo todo está no foreach ;-)
<?php $a['cor'] = 'azul'; $a['potencia'] = '1000'; $a['marca'] = 'fiat'; $a['modelo'] = 'palio'; foreach ($a as $key => $value) { $objeto->$key = $value; } echo $objeto->cor; echo $objeto->potencia; echo $objeto->marca; echo $objeto->modelo; ?>
Olá, isso não seria um hash?
Até mais, e Feliz fim de Natal :)
Olá,
Hash Tables são utilizadas frequentemente para implementar arrays associativos (como no caso do PHP), veja maiores informações em:
http://en.wikipedia.org/wiki/Hash_table
abraços e um ótimo 2007 para vc !
Pablo
buenas!
qual seria a vantagem de ter o objeto em vez do array?
em que situação esse troço é útil?
Em se tratando de uma aplicação orientada a objetos, este tipo de macete ganha maior importância, principalmente no momento de converter estruturas como dados retornados do banco de dados. Neste caso, podemos pegar um registro (que geralmente vem como um array associativo) e tratá-lo como um objeto, por exemplo.
Hum… no PHP 5.1.6:
Strict Standards: Creating default object from empty value in /home/user/example on line 11
linha 11:
$objeto->$key = $value;
Tem uma outro forma de obter o mesmo resultado:
$a[‘cor’] = ‘azul’;
$a[‘potencia’] = ‘1000’;
$a[‘marca’] = ‘fiat’;
$a[‘modelo’] = ‘palio’;
$objeto = (object) $a;
print $objeto->cor;
Bem mais fácil!
Mas e quanto a arrays com indices numéricos?
Isso não iria funcionar. Certo?
E ao contrário ???? Quero pegar tudo que tem dentro de um objeto!! alguém sabe ??
class classe{
public $var1;
public $var2;
function __construct(){
$this->var1=10;
$this->var2=”classe”;
}
}
$c=new classe;
print_r((array) $c);
Olá, para converter um array em objetos, vc precisa de mais um cara chamado stdClass(). Esse cara é uma classe vazia, entao ficaria assim:
$value)
{
$objeto->$key = $value;
}
echo $objeto->cor;
echo $objeto->potencia;
echo $objeto->marca;
echo $objeto->modelo;
?>
Desta forma funcionaria.
Obrigado pelo artigo e por ajudar no desenvolvimento de programadores PHP!