1
resposta

Instância do Objeto produto no assinatura da classe InsereProduto

Reparem que nos parâmetros da função o declarada à instância "Produto"

function insereProduto($conexao,  Produto $produto) {
    $query = "INSERT INTO produtos (nome, preco, descricao, categoria_id, usado)
    VALUES ('{$produto->nome}', {$produto->preco}, '{$produto->descricao}', {$produto->categoria_id}, {$produto->usado})";
    return mysqli_query($conexao, $query);
}

Eu faço sem declarar a instância "Produto" e funciona, Qual à forma correta?

function insereProduto($conexao, $produto) {
    $query = "INSERT INTO produtos (nome, preco, descricao, categoria_id, usado)
    VALUES ('{$produto->nome}', {$produto->preco}, '{$produto->descricao}', {$produto->categoria_id}, {$produto->usado})";
    return mysqli_query($conexao, $query);

}
1 resposta

Oi Michel, tudo bem? Funciona das duas formas, mas existe uma pequena diferença.

Quando você não usa o nome da classe nos parametros, significa dizer que ali você esta aceitando receber qualquer coisa, sendo produto ou não. Isso pode gerar problemas... Já imaginou que em vez de você receber uma instancia de Produto, você receba uma instancia de Categoria? O SQL ficaria incorreto.

Agora quando você usa o Produto nos parametros, você está forçando o tipo de parametro que a função espera receber. Caso seja passado um valor diferente de uma instancia de produto (ou null) o proprio PHP lançara um erro por que foi passado um parametro com um valor diferente do que é esperado pela função...

Entende? Espero ter ajudado. Bons estudos.