Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
tenho a classe produto
<?php
Class produto{
private $id;
private $nome;
private $descricao;
private $categoria;
private $destaque;
private $estoque;
private $preco;
private $altura;
private $largura;
private $comprimento;
private $peso;
private $imagem1;
private $imagem2;
private $imagem3;
public function setar_produto($id,$nome,$descricao,$categoria,$destaque,$estoque,$preco,$altura,$largura,$comprimento,$peso,$imagem1,$imagem2,$imagem3){
$this->id = $id;
$this->nome = $nome;
$this->descricao = $descricao;
$this->categoria = $categoria;
$this->destaque = $destaque;
$this->estoque = $estoque;
$this->preco = $preco;
$this->altura = $altura;
$this->largura = $largura;
$this->comprimento = $comprimento;
$this->peso = $peso;
$this->imagem1 = $imagem1;
$this->imagem2 = $imagem2;
$this->imagem3 = $imagem3;
}
public function inserir_produto(){
include"config/conexao.php";
$sql = "INSERT INTO produto VALUES (null,'$this->nome','$this->descricao','$this->categoria',$this->destaque,$this->estoque,$this->preco,$this->altura,$this->largura,$this->comprimento,$this->peso,'$this->imagem1','$this->imagem2','$this->imagem3')";
mysql_query($sql,$conexao);
include"config/encerra_conexao.php";
echo"inserido com sucesso";
}
public function atualizar_produto(){
include"config/conexao.php";
$sql = "UPDATE produto SET nome_produto = '$this->nome',
descricao_produto = '$this->descricao',
categoria_produto = '$this->categoria',
destaque_produto = $this->destaque,
estoque_produto = $this->estoque,
preco_produto = $this->preco,
altura_produto = $this->altura,
largura_produto = $this->largura,
comprimento_produto = $this->comprimento,
peso_produto = $this->peso,
img1_produto = '$this->imagem1',
img2_produto = '$this->imagem2',
img3_produto = '$this->imagem3'
WHERE id_produto = $this->id";
mysql_query($sql,$conexao);
include"config/encerra_conexao.php";
echo"atualizado com sucesso";
}
public function deletar_produto(){
include"config/conexao.php";
$sql = "DELETE FROM produto WHERE id_produto = $this->id";
mysql_query($sql,$conexao);
include"config/encerra_conexao.php";
echo"Registro com ID ".$this->id." Deletado com sucesso";
}
}
?>
E a classe formulário _produto que ira possuir um método pra montar um formulário na pagina....
class formulario_produto{
private $acao;
private $item;
public function setar_formulario($acao,$item){
$this->acao = $acao;
$this->item = $item;
}
Supondo que ele receba a ação deletar devo chamar o método deletar_produto() da classe produto?? ou este método deveria pertencer a classe formulario_produto?
se tiver que chama-lo da classe produto como faço?
Desde já agradeço
cara..
-> não faça includes dentro da class desse jeito
-> não use um falso encapsulamento por usar, pq se você atribui diretamente o valor ao atributo, de nada adiantou o private
-> não tem nada de orientação a objetos ai
-> prefira usar mysqli
-> não faça echos nesse contexto
-> redundante esse _produto não acha ?
$produto = new Produto();
$produto->inserir_produto();tá muito verboso.. e você não tá criando uma 'interface consistente', já que se você tiver 'categorias', teria:$categoria->inserir_categoria();
eu particularmente não gosto desse tipo de abordagem.
-> não há problema nenhum, em uma class chamar/instanciar/usar outra
Obrigado pelas respostas me ajudaram bastante, vou retirar os echos e os includes,
só não intendi a parte de "não ter nada de orientação a objetos ai", o fato de eu não saber utilizar da maneira correta, não significa que não esteja utilizando.
Estou aqui para aprender.
sim sim lógico, desculpe se fui 'rude', mas entenda mais como uma dica.
veja, se você pensar em 'objetos', em um contexto real (algo que também ainda estou entendendo melhor), não é 'apenas criar Classes, que te fará 'programar em OOP'.
realize as 'correções', e poste novamente para mais observações.
Boa tarde, a classe produto ficou assim, vejam se tem algo a acrescentar ou remover:
<?php
Class produto{
public $id;
public $nome;
public $descricao;
public $categoria;
public $destaque;
public $estoque;
public $preco;
public $altura;
public $largura;
public $comprimento;
public $peso;
public $imagem1;
public $imagem2;
public $imagem3;
function setar_produto($id,$nome,$descricao,$categoria,$destaque,$estoque,$preco,$altura,$largura,$comprimento,$peso,$imagem1,$imagem2,$imagem3){
$this->id = $id;
$this->nome = $nome;
$this->descricao = $descricao;
$this->categoria = $categoria;
$this->destaque = $destaque;
$this->estoque = $estoque;
$this->preco = $preco;
$this->altura = $altura;
$this->largura = $largura;
$this->comprimento = $comprimento;
$this->peso = $peso;
$this->imagem1 = $imagem1;
$this->imagem2 = $imagem2;
$this->imagem3 = $imagem3;
}
public function inserir_produto(){
$sql = "INSERT INTO produto VALUES (null,'$this->nome','$this->descricao','$this->categoria',$this->destaque,$this->estoque,$this->preco,$this->altura,$this->largura,$this->comprimento,$this->peso,'$this->imagem1','$this->imagem2','$this->imagem3')";
mysql_query($sql,$conexao);
}
public function atualizar_produto($selecionado){
$selecionado = $selecionado;
$sql = "UPDATE produto SET nome_produto = '$this->nome',
descricao_produto = '$this->descricao',
categoria_produto = '$this->categoria',
destaque_produto = $this->destaque,
estoque_produto = $this->estoque,
preco_produto = $this->preco,
altura_produto = $this->altura,
largura_produto = $this->largura,
comprimento_produto = $this->comprimento,
peso_produto = $this->peso,
img1_produto = '$this->imagem1',
img2_produto = '$this->imagem2',
img3_produto = '$this->imagem3'
WHERE id_produto = $selecionado";
mysql_query($sql,$conexao);
}
public function deletar_produto($selecionado){
$selecionado = $selecionado;
$sql = "DELETE FROM produto WHERE id_produto = $selecionado";
mysql_query($sql,$conexao);
}
}
?>
A classe formulário não vai existir mais, pois irei criar o formulário direto na interface e dependendo da ação irei chamar o método da classe produto.
Como faço pra saber se há necessidade de criar ou não, uma classe como a do formulário? ou seja classes para componentes da tela, forms, grids etc?Acredito que o que o william quis dizer é que sua oop está 'fraca'. Sugiro o seguinte: Seus atributos estão todos como public será que todos precisam ser public??? Pois eu vejo vários ali que devem ser private... Os que tiverem private crie os respectivos get e set´s metodos, para acessa-lós e mudar seus valores. Outra dica aquele metodo ali setar_produto ele ta fazendo a funcao do construtor da classe, declare seu contrutor __construct...
Uma última dica crie uma classe para trabalhar com seu dataBase e faça suas consultas lá e somente chame as cá atrav´s de um objeto dela, é muito mais prático, funcional e orientado a objetos, ou então opte logo por usar um ORM para php, como o Lumine ou o Doctrine. Experimeite tb o PDO.
Abs
Obrigado pelas dicas, Gostei do que li sobre ORM eu não conhecia, vou escolher entre criar uma classe ou utilizar ORM e fazer algumas alterações, depois coloco o código novo.
Boa tarde pessoal, criei uma classe para o banco chamada query, vejam como ficaram a classe produto e a classe query, se tiver algo que não está correto, podem criticar sem dó, quero agradecer desde já pelas dicas, estão me ajudando a entender melhor como funciona.
A classe produto ficou assim
<?php
Class produto{
public $id;
public $nome;
public $descricao;
public $categoria;
public $destaque;
public $estoque;
public $preco;
public $altura;
public $largura;
public $comprimento;
public $peso;
public $imagem1;
public $imagem2;
public $imagem3;
function __construct($id,$nome,$descricao,$categoria,$destaque,$estoque,$preco,$altura,$largura,$comprimento,$peso,$imagem1,$imagem2,$imagem3){
$this->id = $id;
$this->nome = $nome;
$this->descricao = $descricao;
$this->categoria = $categoria;
$this->destaque = $destaque;
$this->estoque = $estoque;
$this->preco = $preco;
$this->altura = $altura;
$this->largura = $largura;
$this->comprimento = $comprimento;
$this->peso = $peso;
$this->imagem1 = $imagem1;
$this->imagem2 = $imagem2;
$this->imagem3 = $imagem3;
}
public function inserir(){
$valores = "$this->id,'$this->nome','$this->descricao','$this->categoria',$this->destaque,$this->estoque,$this->preco,$this->altura,$this->largura,$this->comprimento,$this->peso,'$this->imagem1','$this->imagem2','$this->imagem3'";
$cadastrar_produto = new query('loja','produto');
$cadastrar_produto->inserir($valores);
}
public function deletar(){
$condicao = "id_produto = $this->id";
$excluir_produto = new query('loja','produto');
$excluir_produto->deletar($condicao);
}
public function atualizar(){
$alteracoes = "nome_produto = '$this->nome',
descricao_produto = '$this->descricao',
categoria_produto = '$this->categoria',
destaque_produto = $this->destaque,
estoque_produto = $this->estoque,
preco_produto = $this->preco,
altura_produto = $this->altura,
largura_produto = $this->largura,
comprimento_produto = $this->comprimento,
peso_produto = $this->peso,
img1_produto = '$this->imagem1',
img2_produto = '$this->imagem2',
img3_produto = '$this->imagem3'";
$condicao = "id_produto = $this->id";
$alterar_produto = new query('loja','produto');
$alterar_produto->atualizar($alteracoes, $condicao);
}
}
?>
E a classe query
<?php private $banco;
private $tabela;
private $host;
private $user;
private $pass;
function __construct($banco,$tabela){
$this->banco = $banco;
$this->tabela = $tabela;
$this->host = "localhost";
$this->user = "root";
$this->pass = "adm";
}
public function inserir($valores){
$conexao = mysql_connect("$this->host","$this->user","$this->pass");
$bd = mysql_select_db("$this->banco",$conexao);
$valores = $valores;
$sql = "INSERT INTO $this->tabela VALUES($valores)";
mysql_query($sql,$conexao);
mysql_close($conexao);
echo $valores."<br>";
echo $sql;
}
public function deletar($condicao){
$conexao = mysql_connect("$this->host","$this->user","$this->pass");
$bd = mysql_select_db("$this->banco",$conexao);
$condicao = $condicao;
$sql = "DELETE FROM $this->tabela WHERE $condicao";
mysql_query($sql,$conexao);
mysql_close($conexao);
echo $sql;
}
public function atualizar($alteracoes,$condicao){
$conexao = mysql_connect("$this->host","$this->user","$this->pass");
$bd = mysql_select_db("$this->banco",$conexao);
$alteracoes = $alteracoes;
$condicao = $condicao;
$sql = "UPDATE $this->tabela SET $alteracoes WHERE $condicao";
mysql_query($sql,$conexao);
mysql_close($conexao);
echo $sql;
}
}
?>
Nenhum comentário? se estiver tudo certinho coloca como resolvido, se houver alguma mudança que eu ainda precise fazer pra ficar 100% só falar. valew pessoal
abs
Esse método deve estar na classe PRODUTO, mas eu não faria exibição de texto lá (os echo's que você colocou), apenas retornaria TRUE ou FALSE e eventuais resources do banco de dados (no caso de 'selecionar_produto', por exemplo).
Se quiser criar um método na FORMULARIO_PRODUTO como uma action, apenas chame o método apropriado da PRODUTO e de acordo com o retorno exiba o que tiver que exibir, o que, pelo visto, é o intuito dessa classe de formulário.