Quando usar == ou === em php?
Afinal de contas, quando devemos ou não usar o operador identico (===)? Pra que serve esse operador de comparação? Qual a diferença entre eles?
Ao trabalhar com formulários, é comum a necessidade de validar um email e não existe uma forma padrão de fazer isso. Existem diversas regras de , por exemplo, que haja algo escrito antes do @
. Uma forma de verificar isso é usando a função strpos que verifica a posição da primeira ocorrencia de uma string:
public function validaEmail($email) {
$posicao = strpos($email,@) ;
if($posicao == 0) { //exibe uma menssagem de erro pra view dizendo que faltou a conta
}
}
Mas, caso o usuario não digite nem o @
precisamos, também, dizer que aquele campo é especifico para email! No caso de não haver ocorrencia de string, a função strpos()
retorna null
. Portanto, para validar, também, este caso teriamos:
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//
}
}
}
Beleza, nossa lógica faz todo sentido! se o @
estiver na posição 0
da string $email
falamos que faltou a conta. Se não houver @
na variavel $email
exibimos outra mensagem dizendo que nosso usuario preencheu o campo errado!
Mas, se rodarmos esse código, as duas menssagens serão exibidas!
Isso acontece porque, na tabela de comparação de tipos do php o valor 0
é igual a null
! Precisamos, de alguma forma, comparar valores de uma forma mais especifica onde o tipo faça diferença. Neste caso, 0
seria apenas um inteiro qualquer, não outra representação de null
.
E é aqui que devemos usar o operador identico ===
! Com este operador, diferente do ==
, levamos em conta não só o valor mas também o tipo na hora da comparação.
Então, nossa validação de email deve ser escrita um pouco diferente:
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//
}
}
}
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.
Uma pequena diferença de tipos, pode causar um grande impacto nas funcionalidades do nosso sistema.
E você? O que achou do operador identico? Compartilhe com a gente sua opinião!
Para saber mais conceitos em PHP, aqui na Alura temos uma formação focada no desenvolvimento PHP