Dúvidas em Orientação a Objetos

Iniciado por babu, 29 de Outubro de 2008, 11:06

tópico anterior - próximo tópico

babu

Olá pessoal,
  Estou iniciando em Orientação a objetos, e deparei com um erro quando tentei implementar o teste bem simples.

   Primeiro eu criei uma classe:

         
<?php
class Produto
{
    var $Codigo;
    var $Descricao;
    var $Quantidade;
    var $Preco;
}
?>
Depois eu instanciei o objeto, atribui valores e mandei imprimir o objeto (sei que será impresso apenas o indenficador do objeto na memória)


<?php
//esse é o objeto.php
//insere classe
include_once 'classes/Produto.class.php';

//cria um novo objeto
$produto = new Produto;

//atribuindo valores
$produto->Codigo = 4001;
$produto->Descricao = 'Catedral 20 ano Ao Vivo';

echo $produto;

?>
O problema é o seguinte: Quanto eu executo o objeto.php dá o seguinte erro:
Catchable fatal error: Object of class Produto could not be converted to string in C:\wamp\www\objeto.php on line 12

Se souber qual o problema e quiser me ajudar ficarei muito grato!
Joabe Braga, bacharel em Sistemas de Informação pela UniEvangélica - Anápolis - GO.

RicardoSEP

Cara, desse jeito não irá funcionar mesmo. Você está pedindo para o PHP printar o objeto. Somente Strings podem ser exibidas. Então como o PHP saberá o que exibir.

Porém se você indicar que você quer exibir o atributo Código, aí funciona. Dessa forma:


<?phpclass Produto{    var $Codigo;    var $Descricao;    var $Quantidade;    var $Preco;}$produto = new Produto;$produto->Codigo = 4001;$produto->Descricao = 'Catedral 20 ano Ao Vivo';echo $produto->Codigo;?>



Porém a forma que eu coloquei acima vai contra todas as boas práticas da programação. A forma mais "correta" de se fazer o que eu fiz acima seria assim:

<?phpclass Produto{    private $Codigo;    private $Descricao;    private $Quantidade;    private $Preco;    function setCodigo($code) {    	$this->Codigo = $code;    }    function getCodigo() {   	return $this->Codigo;    }}$produto = new Produto;$produto->setCodigo(4001);echo $produto->getCodigo();?>


Agora, se você quiser mesmo assim exibir o objeto, você pode criar um método que transforme seus atributos em um único String concatenado. Mais ou menos assim:

<?phpclass Produto{    private $Codigo;    private $Descricao;    private $Quantidade;    private $Preco;    function setCodigo($code) {    	$this->Codigo = $code;    }    function getCodigo() {   	return $this->Codigo;    }    function setDescricao($Desc) {        $this->Descricao = $Desc;    }        function getDrescrica() {        return $this->Descricao;    }     function toString() {	return $this->Codigo . $this->Descricao;    }}$produto = new Produto;$produto->setCodigo(4001);$produto->setDescricao("Teste");echo $produto->toString();?>


Cara, se quiser ir fundo na Orientação a objeto, eu não recomendaria o PHP. O PHP 5 é orientado a objeto, mas não tanto. Ele chama muito ainda para a programação estruturada. Eu escolheria uma linguagem como o Java, Python ou Ruby. O pessoal geralmente vai no Java. E também é só uma dica.

Bons estudos.