Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leonardo2334

Orientacao a Objeto

Recommended Posts

fala pessoal alguém poderia me dizer se este código que fiz esta certo orientado a objeto? ele esta instanciado no meu index alguém poderia me dizer se e assim que se faz isso?

 

class Produtos{
 
//Lista os Produtos no index 
public function ListarProdutos(){
 
$sql = mysql_query("SELECT * FROM produtos LIMIT 8"); 
while ($aux = mysql_fetch_array($sql)) {
$this->nome = $aux['nome'];
$this->preco = $aux['preco'];
$this->categoria = $aux['categoria'];
$this->descricao = $aux['descricao'];
$this->image = $aux['img'];
$this->id = $aux['id_produto'];
 
print"
<div id=\"imggeral\"> 
<div id=\"img1\">
<div class=\"foto\">
<img src=\"img/$this->image\"></img>
</div>
<p class=\"tenis\">$this->nome</p>
<p class=\"valor\">R$ $this->preco</p>
<a class=\"button1\" href=\"compra.php?cod=$this->id\">Comprar</a>
</div>
"; 
}
}
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas observações:

 

1. Não faz sentido usar $this->nome, $this->preco etc nesse caso. O $this é pra referenciar dados do próprio objeto. Se você tivesse 8 instâncias da classe Produto, faria sentido. Mas você só tem um, que seleciona 8 do bd. Use variáveis locais mesmo, nesse caso ($nome, $preco etc)

 

2. Seu método deveria retornar um array com os dados, para que seja processado pela Controller. Evite misturar lógica com exibição. Estudo um pouco sobre MVC

 

3. funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu quis dizer é que no contexto que você utilizou, o $this não faz sentido algum. Se fosse um array, com 8 instâncias de Produto, aí ok. Por exemplo:

 

 

$products = [];
while ( $f = fetch() )
{
    $Product = new Product();
    $Product->name = $f['name'];
    $products[] = $Product;
}
 
return $products;

 

Assim, cada instância terá o seu valor. Para isso servem as propriedades/atributos de calsse

Compartilhar este post


Link para o post
Compartilhar em outros sites

4. Não faça o php imprimir HTML. Isso é mistura de camadas.

 

5. Use nomes de variáveis, métodos e classes em inglês

 

6. Faça métodos genéricos. Por exemplo, enviando o LIMIT 8, por parâmetro, vc pode usar esse método em mais de uma situação sem precisar duplicar código.

 

Agora respondendo a pergunta inicial: impossível respondermos se está "orientado a objetos", olhando apenas uma classe. Orientação a Objetos não é "Orientação a classes".

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.