Autor Tópico: Dúvidas em Orientação a Objetos  (Lida 2662 vezes)

Offline babu

  • Usuário Ubuntu
  • *
  • Mensagens: 20
    • Ver perfil
Dúvidas em Orientação a Objetos
« Online: 29 de Outubro de 2008, 11:06 »
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.

Offline RicardoSEP

  • Usuário Ubuntu
  • *
  • Mensagens: 56
  • MeuPost
    • Ver perfil
    • MeuPost
Re: Dúvidas em Orientação a Objetos
« Resposta #1 Online: 29 de Outubro de 2008, 22:18 »
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:

Código: [Selecionar]
<?php
class 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:

Código: [Selecionar]
<?php
class 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:

Código: [Selecionar]
<?php
class 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.