Então pessoal, sei que é bom criar construtores, porque ele faz com que alguns atributos sejam obrigatórios, e após cria-los podemos descartar alguns setters da nossa classe, mas no meu caso, por causa da minha função insereProduto (vou compartilhar o código) vocês acham que eu deveria manter os setters da minha classe ou modificar a função ?
class Produto {
private $id;
private $nome;
private $preco;
private $descricao;
private $categoria;
private $usado;
function __construct($nome, $preco, $descricao, Categoria $categoria, $usado){
$this->nome = $nome;
$this->preco = $preco;
$this->descricao = $descricao;
$this->categoria = $categoria;
$this->usado = $usado;
}
function __toString() {
return $this->nome.": R$ ".$this->preco;
}
public function precoComDesconto($valor = 0.1){
if ($valor > 0 && $valor <= 0.5) {
$this->preco -= $this->preco * $valor;
return $this->preco;
}
}
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
}
public function getNome() {
return $this->nome;
}
public function getPreco() {
return $this->preco;
}
public function getDescricao() {
return $this->descricao;
}
public function getCategoria() {
return $this->categoria;
}
public function isUsado() {
return $this->usado;
}
public function setUsado($usado) {
$this->usado = $usado;
}
}
unction listaProdutos($conexao){
$produtos = array();
$resultado = mysqli_query($conexao, "select p.*, c.nome as categoria_nome from produtos as p join categoria as c on c.id=p.categoria_id");
while($produto_array = mysqli_fetch_assoc($resultado)){
$categoria = new Categoria();
$categoria->setNome($produto_array['categoria_nome']);
$nome = $produto_array['nome'];
$preco = $produto_array['preco'];
$descricao = $produto_array['descricao'];
$usado = $produto_array['usado'];
array_push($produtos, $produto);
$produto = new Produto($nome, $preco, $descricao, $categoria, $usado);
$produto->setId($produto_array['id']);
}
return $produtos;
}
function insereProduto($conexao, Produto $produto){
$produto->setNome(mysqli_escape_string($conexao, $produto->getNome()));
$produto->setPreco(mysqli_escape_string($conexao, $produto->getPreco()));
$produto->setDescricao(mysqli_escape_string($conexao, $produto->getDescricao()));
$produto->getCategoria()->setId(mysqli_escape_string($conexao, $produto->getCategoria()->getId()));
$query = "insert into produtos (nome, preco, descricao, categoria_id, usado)
values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}',
{$produto->getCategoria()->getId()}, {$produto->isUsado()})";
echo $query;
return mysqli_query($conexao, $query);
}
Repare que estou usando $produto->setAlgumacoisa()
para usar a função mysqli_escape_string().
Desde já agradeço