Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ajuda para entender artigo Alura: "Quando usar == ou === em php?"

Olá a todos,

Estive lendo o artigo que faz parte da formação PHP cujo título é "Quando usar == ou === em php?", presente neste link.

Neste artigo há um trecho de código que me deixou bastante confuso, pois parece não funcionar do jeito mencionado pelo autor.

O trecho de código que me refiro é o terceiro e último:

public function validaEmail($email) { 
    $posicao = strpos($email,@) ;

    if($posicao === 0) { //exibe uma menssagem de erro dizendo que faltou a conta// } 
        if($posicao === null) { //exibe uma menssagem de erro dizendo que aquele campo é especifico para email// 
        } 
    }
}

Minha dúvida está em relação ao comportamento desta função, que o autor relata o seguinte:

"Agora sim somente uma menssagem será exibida. Se a posição for zero, mostramos a menssagem dizendo que faltou a conta. Se não houver @ mostramos a menssagem dizendo que o campo é especifico para email."

Acontece que se for usado "===" na comparação, nunca será possível das duas condições serem atendidas, e como o segundo "IF" está dentro do bloco do primeiro, nunca será executada sua condição, certo?

Espero ter sido claro em expor minha dúvida Obrigado!

1 resposta
solução!

Criei algo que tirou minha dúvida:

<?php

function validaEmail($email) {

    echo "Início validação de e-mail: $email" . PHP_EOL; 

    $posicao = strpos($email,'@');

    echo "strpos: $posicao" . PHP_EOL;

    if ($posicao === 0) { 

        echo "strpos deu zero" . PHP_EOL; 

    } else {
        echo "strpos NÃO deu zero" . PHP_EOL; 
    }

    if ($posicao === null) { 

        echo "strpos deu nulo" . PHP_EOL; 

    } else {
        echo "strpos NÃO deu nulo" . PHP_EOL; 
    }

    echo "Fim validação de e-mail: $email" . PHP_EOL; 

}

validaEmail("correto@teste.com.br");
validaEmail("@teste.com.br");
validaEmail("teste.com.br");
validaEmail("");
validaEmail(null);

Saída:

Início validação de e-mail: correto@teste.com.br
strpos: 7
strpos NÃO deu zero
strpos NÃO deu nulo
Fim validação de e-mail: correto@teste.com.br
Início validação de e-mail: @teste.com.br
strpos: 0
strpos deu zero
strpos NÃO deu nulo
Fim validação de e-mail: @teste.com.br
Início validação de e-mail: teste.com.br
strpos:
strpos NÃO deu zero
strpos NÃO deu nulo
Fim validação de e-mail: teste.com.br
Início validação de e-mail:
strpos:
strpos NÃO deu zero
strpos NÃO deu nulo
Fim validação de e-mail:
Início validação de e-mail:
strpos:
strpos NÃO deu zero
strpos NÃO deu nulo
Fim validação de e-mail:

Acredito que StrPos nunca irá retornar o "nulo" comparavél com "==="