Palavras-chave: PHP5, Orientação a objetos, classes, unicidade, __toString()
Um dos conceitos na orientação a objetos é a unicidade. Cada objeto é único no sistema, não existem dois objetos iguais.
Você constata isto simplesmente imprimindo o objeto na tela, pois o sistema irá exibir o OID (object identificator) do objeto em memória. Cada objeto possui um OID diferente.
Caso você queira que o sistema exiba outra informação ao imprimir o objeto, utilize o método __toString(), ele permite redefinir o comportamento padrão ao se utilizar, por exemplo, o comando “print” ou “echo” sobre um objeto, sendo interessante para fins de debug.
A seguir temos duas classes e um objeto de cada classe. A primeira não utiliza o __toString(), sendo exibido o OID do objeto, a segunda utiliza, sendo exibido o nome da pessoa.
<?php
class Automovel
{
private $modelo;
function setModelo($modelo)
{
$this->modelo = $modelo;
}
}
class Pessoa
{
private $nome;
function setNome($nome)
{
$this->nome = $nome;
}
function __toString()
{
return '#'.$this->nome;
}
}
$palio = new Automovel;
$palio->setModelo('Palio ED 1.0');
echo $palio; // resultado = Object id #1
echo "\\n<br>\\n"; //quebra linha
$maria = new Pessoa;
$maria->setNome('Mariana Pereira');
echo $maria; // resultado = #Mariana Pereira
echo "\\n<br>\\n"; //quebra linha
?>







5 comments
Comments feed for this article
1 fevereiro 2007 às 12:28
Rodrigo Machado
No PHP 5.2, finalmente melhoraram a implementação desse método:
$obj = new Pessoa(‘Rodrigo’);
Antes:
echo “Objeto: “.$obj; // saída: Objeto: object
Depois:
echo “Objeto: “.$obj; // saída: Objeto: Rodrigo
5 fevereiro 2007 às 16:22
yo
Quer dizer então que arrumaram isso no PHP 5.2 ?
Bom, agora eu tenho uma piadinha a menos sobre php =(
4 setembro 2007 às 14:59
Allan Schmitt
Ahhh!!
=D
shoooowwww…
não sabia que no php 5.2 já tinham arrumado isto!
agora sim show!
19 novembro 2008 às 21:48
Jonathan
Paraben pelo post…. fico feliz em saber….
9 fevereiro 2009 às 14:30
Edson Rodrigues
Boa tarde galera entrei nesse blog estava dando uma nessa OO, a um pequeno problema nessa OO, apenas esta sendo convertido em string o 2º objeto o 1º nao.
Dei uma corrigida nesssa OO.
modelo = $modelo;
}
function __toString()
{
return $this->modelo;
}
}
class Pessoa
{
private $nome;
function setNome($nome)
{
$this->nome = $nome;
}
function __toString()
{
return ‘#’.$this->nome;
}
}
$palio = new Automovel;
$palio->setModelo(‘Palio ED 1.0′);
echo $palio; // resultado = Object id #1
echo “\\n\\n”; //quebra linha
$maria = new Pessoa;
$maria->setNome(‘Mariana Pereira’);
echo $maria; // resultado = #Mariana Pereira
echo “\\n\\n”; //quebra linha
?>
Agora sim.