PHP: Utilizando o método __toString()

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
?>
This entry was posted in PHP. Bookmark the permalink.

6 Responses to PHP: Utilizando o método __toString()

  1. 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

  2. yo says:

    Quer dizer então que arrumaram isso no PHP 5.2 ?
    Bom, agora eu tenho uma piadinha a menos sobre php =(

  3. Ahhh!!
    =D
    shoooowwww…

    não sabia que no php 5.2 já tinham arrumado isto!

    agora sim show!

  4. Jonathan says:

    Paraben pelo post…. fico feliz em saber….

  5. Edson Rodrigues says:

    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.

  6. Wanderson Moreira says:

    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

Comments are closed.