# 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
<?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](http://php.net/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](https://goo.gl/989GKW)

[PHP “like a boss” [2]: Crie seu QueryBuilder](https://goo.gl/lvuzYS)

[PHP “like a boss” [3]: Construa seu Router](https://goo.gl/bAuBkS)

[PHP “like a boss” [4]: Utilizando Controllers](https://goo.gl/yDgk8r)

[PHP “like a boss” [5]: Trabalhando com Models](https://phpzm.rocks/php-like-a-boss-5-trabalhando-com-models-bc5eb164ee11)

PHP “like a boss” [6]: Melhorando seu Router: Middlewares

PHP “like a boss” [7]: Melhorando seu Model: Repositories
