Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Duvida sobre conversão de 0 em false e vice-versa

public function __construct($id = false)
    {
        if ($id) {
            $this->id = $id;
            $this->carregar();
        }
    }

Dá forma como o construtor foi feito, caso seja passado o ID=0 , mesmo que exista, não será exibido pois o if ($id) entenderá o 0 como false.

Correto?

1 resposta
solução

Eduardo, boa tarde!

O PHP (assim como algumas outras linguagens) faz a conversão de tipos de forma implícita, ou seja, se não forem do mesmo tipo ele irá converter para algo comum aos dois, na documentação do PHP ele diz que considera como falso os seguintes valores:

  • O próprio boleano false
  • Inteiros que sejam 0 ou -0
  • Decimais que sejam 0.0 ou -0.0
  • Strings vazias ou string com 0
  • Array com nenhum elemento
  • Tipo null, incluindo os não definidos
  • XML que nenhuma tag

Sendo assim, sim ele irá considerar um id que tenha 0 como valor igual a 0.

Vale a pena pensar que raramente um id será 0, recomendasse que ele comece a partir do 1 (diferentemente de um index de um array).

Mas caso isso seja uma regra muito importante, você pode usar uma declaração do PHP onde ele não irá fazer esse cast (conversões para você), usando o

declare(strict_types=1);

Assim ele não irá fazer as conversões por você, veja o exemplo abaixo:

?php
function pegaQuantidade(): int {
    return '100 maçãs';
}
echo get_quantity() . PHP_EOL;

O retorno:

Notice: A non well formed numeric value encountered in /Users/bishop/tmp/pmkr-994/junk.php on line 4
100

Já no caso abaixo usando o strict types

<?php declare(strict_types=1);

function get_quantity(): int {
    return '100 apples';
}
echo get_quantity() . PHP_EOL;

O retorno será:

Fatal error: Uncaught TypeError: Return value of get_quantity() must be of the type int, string returned in example.php:4

Eu espero ter ajudado e bons estudos!