Quem nunca escreveu ou abriu um código de um programa escrito e deu de cara com a paisagem abaixo?
<?php
include 'conexao.php';
$noticias = $DB->query("SELECT * FROM noticias WHERE categoria = '{$_GET['categoria']}'");
while ($noticia = $DB->fetch($noticias)) {
?>
<div>
<?php
echo $noticia['titulo'];
?>
</div>
<?php
}
Perceba que esse trecho inocente é um assassino. Não quero ser o dono da verdade e nem ensinar a ninguém a fazer o seu trabalho, só que hoje é possível ir além disso com PHP; PHP não é mais só isso. Ele é um assassino porque ele te deixa vulnerável e te faz escrever muito código “irrefatorável”. Ele é um assassino da sua produtividade, então quando você programa em PHP dessa forma tende a ser o principal prejudicado.
Na linha 3 tem um
include
feito diretamente no arquivo. Não precisamos mais usar include depois que criaram o composer e que nos entregaram de bandeja um padrão de autoload com a PSR-4 do PHP-FIG. Poderia citar como principais desvantagens a necessidade de mapear diretórios diretamente, o que tira sua liberdade de alteração de arquivos e duplicidade de código como fatores que me fizeram abandonar essa prática.Essa linha 5 é assustadora. Nela acessamos uma super global sem um filtro e escrevemos um SQL no meio do nada. Deixo como sugestão criar uma função de helper em cima da filter_input ou usá-la diretamente.
A linha 7 faz um fetch progressivo em um resultado de uma query. Para esse caso eu recomendaria fortemente um fetchAll no resultado para colocá-lo dentro de uma collection.
Na linha 11 temos um echo sendo executado diretamente no resultado que veio da consulta ao banco de dados e na minha experiência isso pode te dar muita dor de cabeça com o famoso charset mismatch.
Por último, uma dica suave, esse arquivo ao que tudo indica estaria sendo acessado diretamente pelo navegador. Isso não é de todo ruim, mas um dia você vai ter centenas de arquivos e vai precisar definir níveis de acesso diferentes, segmentar/agrupar e fazer uma porção de coisas que você não vai conseguir porque fez centenas de programas e não um programa em PHP. Um único ponto de acesso para a sua aplicação pode te transformar em super dev!
Obviamente despejar um monte de críticas e não deixar alternativas não faz muito sentido. Com isso estou criando uma série de artigos com o nome ‘PHP “like a boss”’ (a medida que eu for publicando vou tornando os links acessíveis):
PHP “like a boss” [1]: Usando Composer
PHP “like a boss” [2]: Crie seu QueryBuilder
PHP “like a boss” [3]: Construa seu Router
PHP “like a boss” [4]: Utilizando Controllers
PHP “like a boss” [5]: Trabalhando com Models
PHP “like a boss” [6]: Melhorando seu Router: Middlewares
PHP “like a boss” [7]: Melhorando seu Model: Repositories