Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Funcionamento do IF/ELSEIF/ELSE

Guys, me deparei com uma situação que me gerou uma dúvida no funcionamento do if/elseif/else. Primeiramente, segue o código:

<?php 
    $a = 0;
    $a = 1;
    $a = "";

    if ($a==0) 
    {
        $b=" lalalalalalalala ";
    }
    elseif ($a==1)
    {
        $b=" lelelelelelelele ";
    }
    else {
        $b= " lililililililili ";
    }
    echo $b;

O "$a" foi declarado várias vezes só pra exemplificar mesmo. Pois bem:

Quando $a é = 0, o programa entra no IF e printa "lalalalala...". (OK) Quando $a é = 1, o programa entra no ELSEIF e printa "lelelele...".(OK) Quando $a é = "", o programa entra no IF e printa "lalalala...". (NÃO OK)

Por que isto acontece? Ao meu ver, ele deveria entrar no ELSE. Queria saber oq ocorre com o PHP que não fica claro pra gente.

P.s.: Pra resolver isso, eu utilizei o operador " === ". Queria saber o motivo/como que o PHP chega nessa conclusão de que $a="" cai num if de condição $a==0.

4 respostas
solução!

Oi Ramon, essa é uma pergunta que vez ou outra sempre aparece. O que acontece é que na comparação com dois iguais ==, o PHP tenta fazer uma conversão de tipos, então por exemplo, 0 == "", vai dar no mesmo. Tanto 0 quanto a string vazia, são valores falsos na comparação boleana depois da conversão. Isso retorna true e entra no if.

Quando você usa os 3 iguais ===, você não compara apenas os valores, mas sim seus tipos também, como um string não é um número, então, o resultado esperado é que isso seja falso e que ele não entre no if.

outros exemplos são: "" == false, false == 0, "" == 0, "" == null e etc...

Ramon,

complementando o que Wanderson disse. Toda as comparações a seguir com uma String vazia daria true:

"" (string vazia)
0 (Zero)
"0" (Zero como  string)
NULL
FALSE
array() (array vazio)

Abraços

Cara, a resposta de ambos vão ser de grande valia. Vou guardar essa parada no coração, sério mesmo.

De um iniciante, Muito obrigado!

Apenas complementando oq a galera falou, talvez essas ideias de comparação fiquem mais claras dando uma olhada na tabela de comparação do PHP:

http://php.net/manual/pt_BR/types.comparisons.php

Lá ficam descritos todos os casos de comparação =)