O que o Jogo do Bicho tem a ver com o PHP 8.1? 
Tags: php, braziliandevs, devlive, webdev
Published: 2021-11-29 23:47:42

O PHP foi atualizado em uma **_Major Update_** para a versão 8.1. O que isso tem a ver com o **Jogo do Bicho**? Vamos descobrir juntos. Mas, resumidamente, agora se você quer implementar o jogo do bicho em #PHP a nova nova versão deixa tudo mais **seguro** e **fácil**. 

Mas para **atestar** o supracitado, vamos **implementar** o Jogo do Bicho em PHP antes do 8.1 passo a passo e ao mesmo tempo compará-lo com as facilitações providas pelo PHP 8.1.
**(◡‿◡✿)**

Como "todos sabemos" o Jogo do Bicho possuí 25 bichos (animais). Então para isso precisaríamos alguma maneira de criar as possíveis "Apostas". 

## Antes do PHP 8.1
Antecedente ao **PHP 8.1**, não existia "Enumerações" _(ENUM)_ e pessoas desenvolvedoras precisavam (deviam) fazer mais ou menos o seguinte:

```php
class ApostarNoBixo
{
    const AVESTRUZ = 1; /* 1 */
    const AGUIA = 2; /* 2 */
    /* ...restante dos bichos ... */
    const URSO = 23;/* 23 */
    const VEADO = 24;/* 24 */
    const VACA = 25;/* 25 */
}
$apostandoNoBixo = new ApostarNoBixo();
jogarNoBixo($apostandoNoBixo::AGUIA);
```  
Parece bom? - Sim. É uma implementação válida <small>(muito similar a ideia de **magic strings**)</small>, todavia, a ideia principal é que não usemos classes para definir **tipos**, no final de tudo, a função em questão, que executa a ação **"jogarNoBixo"** (ou seja, faz mesmo a aposta) ainda precisa receber um número inteiro e não um **estritamente** um tipo compatível a uma Aposta do Jogo Do Bicho (Inteiro de 1 até 25).

```php 
function jogarNoBixo(int $aposta): string {
  if($aposta <= 25 && $aposta > 0)  {
    return match ($aposta) {
      23 => 'Acertou' . PHP_EOL, 
      default => "Errouuuuu" . PHP_EOL
    };
  } else {
    return 'Aposta inválida, dinheiro do Bixeiro.';
  }
}
```

## Com o PHP 8.1 ( ˘ ³˘)♥

Com o PHP 8.1 foi trazido a vida a ideia das enumerações, isto é: criar um **"tipo"** e facilitar ainda mais a nossa vida, até mesmo mantendo retro contabilidade com implementações antigas através de _backed enums_.

### E como isso funciona?
Esse exemplo (é um backed enum) e já deve te fornecer entendimento completo da ideia...

```php
enum PossiveisApostasNoBicho: int
{
    case AVESTRUZ = 1; /* 1 */
    case AGUIA = 2; /* 2 */
    /* ...restante dos bichos ... */
    case URSO = 23;/* 23 */
    case VEADO = 24;/* 24 */
    case VACA = 25;/* 25 */
}
```
***Daora. Mas e a função?*** (☞ಠ_ಠ)☞

```php
function jogarNoBixo(PossiveisApostasNoBicho $aposta): string
{
  return match ($aposta) {
    PossiveisApostasNoBicho::URSO, 23 => 'Acertou' . 
    default => "Errouuuuu" . PHP_EOL 
  };
}
```
Além da função agora ter um tipo em seu argumento único não primitivo, também ficou mais curta. E além disso, para usar ela não precisaríamos instanciar um objeto para isso, só faríamos o seguinte:

```php
 print "Resultado". jogarNoBixo(PossiveisApostasNoBicho::URSO); // Acertou
```

Massa né? Vem pro twitter para acompanhar o próximo: [★ Luís Von Müller #bolhaDev](https://twitter.com/luisvonmuller)


**눈_눈 Aviso**: 
<small>
Através deste artigo, em momento algum o Autor deseja fazer **Endosso** do Jogo do Bicho ou de **Jogos de Azar**. O autor apenas julga conveniente e facilitador (lê-se torna mais acessível) contextualizar culturalmente ao Brasil 🇧🇷. 
</small>

<small>
Créditos:
TopPng pelas correntes que PHP veste
PHP pelo elefante
PHP pela 8.1</small><small><small>
Parte da arte de fundo publicada publicamente sem licença de uso nenhuma explicitada pelo criador, utilizada na capa do artigo foi criada por: [@aguiarbraz](https://twitter.com/aguiarbraz) - neste [tweet](https://twitter.com/aguiarbraz/status/1121193433434152960)
</small>
</small>