PHP “like a boss”: Como trabalhar com PHP em 2017

PHP “like a boss”: Como trabalhar com PHP em 2017

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