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:


<?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:

<?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:

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