Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método estatico - 02 Listando produtos

Até agora (em categorias) não tinhamos utilizados métodos estáticos. Por qual motivo fizemos isso agora?

<?php

class Produto
{
    public $id;
    public $nome;
    public $preco;
    public $quantidade;
    public $categoria_id;

    public static function listar()
    {
        $query = "SELECT id, nome, preco, quantidade, categoria_id FROM produtos";
        $conexao = Conexao::pegarConexao();
        $resultado = $conexao->query($query);
        $lista = $resultado->fetchAll();
        return $lista;
    }
}

Na prática devo utilizar metodos estatico ou não e pq?

3 respostas
solução!

Oi Ricardo, tudo bem? Se deve usar ou não, a resposta é: Depende.

Como sabemos, métodos estáticos são usados no contexto da classe e neles definimos comportamentos que não são particulares dos objetos em si.

Nesse exemplo de código que você colou, apesar de me parecer estranho a primeira vista, é um exemplo que é OK no contexto. Isso pode variar e depende de vários fatores.

Pode ser a aplicação de um padrão de projeto ou mesmo simplificação para deixar o ensino de um determinado conceito um pouco mais didático.

Por que usaram agora e não antes, não consigo pensar no por que. Não vi essas aulas ainda.

Obrigado.

Oi Ricardo, eu sou uma das pessoas responsáveis pelo Fórum, mas se preferir uma resposta direta do instrutor, eu posso tentar contatar ele.

No geral, métodos estáticos ajudam em tarefas pontuais, se deve usar ou não, vai depender do contexto e talvez do padrão que esteja fazendo.

Como o método listar não se refere a um objeto específico, faz sentido sim que ele seja estático. O Laravel por exemplo, faz algo do tipo e você pode ver exemplos na documentação: https://laravel.com/docs/5.6/eloquent#retrieving-models

Mas tem um porém, no Laravel, os métodos são herdados do Eloquent ORM.

Se não estou enganado, essa é a aplicação de um padrão de projeto, mas não lembro exatamente o nome do padrão.

Desculpa a demora pra responder.