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 ?>
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
Quer dizer então que arrumaram isso no PHP 5.2 ?
Bom, agora eu tenho uma piadinha a menos sobre php =(
Ahhh!!
=D
shoooowwww…
não sabia que no php 5.2 já tinham arrumado isto!
agora sim show!
Paraben pelo post…. fico feliz em saber….
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.
Olá galera. Gostei do post mas estou com dúvidas.
public function setfuma($fuma){
$this->fuma = $fuma;
}
public function setreligiao($religiao){
$this->religiao = $religiao;
}
function __toString()
{
return $this->religiao;
}
Para $religiao=”Religião”. Estou tendo retorno os retornos
echo($this->fuma); Retorno = Religiao->fuma
echo($this->religiao); Retorno=Religiao
Porque? Religiao->fuma