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

Assinatura de métodos abstratos

Olá. Qual é a convenção no PHP para a assinatura dos métodos abstratos? Na aula o Vinicius escreveu:

abstract protected function method() 
{
    ...
}

Mas já vi códigos escritos:

protected abstract function method() 
{
    ...
}

Qual é a forma mais utilizada? Qual a convenção utilizada neste caso? O mesmo vale para métodos estáticos?

2 respostas
solução!

PSR's (PHP Standard Recommendation) são regras e sugestões que determinam como um código PHP deve ser desenvolvido. Ela aborda inúmeras características do código e permite que certos padrões sejam seguidos e facilita a sua "interoperabilidade".

São vários conjuntos numerados de regras, alguns "deprecados", outros ativos, alguns mais importantes, outros nem tanto.

A PSR-12, uma das mais importantes, em seu item 4.6 dita o seguinte:

4.6 abstract, final, and static

  • When present, the abstract and final declarations MUST precede the visibility declaration.
  • When present, the static declaration MUST come after the visibility declaration.

Uma boa extensão do VSCode se baseia no PHP CS Fixer pra organizar essas convenções enquanto você programa. É uma mão na roda, não apenas para esta, mas para diversas outros dúvidas do dia a dia.

Um detalhe me chamou atenção no seu snippet: você colocou chaves nas suas definições. Por se tratar de um método abstrato, ele não permite corpo (nem mesmo vazio). Então, isso não é permitido. O código final correto e ajustado à PSR-12 seria, portanto:

abstract class Foo
{
    abstract protected function method();
}

Sobre o snippet, boa observação, falha minha mesmo. Obrigado pela resposta, sanou minha dúvida. Posteriormente vou estudar as PSR's também. Valeu!!