Estou acostumado a Java e, portanto, sempre acho que as condições são interpretadas da esquerda para a direita, ou seja, há uma diferença vital null != $obj
e$obj != null
Agora, esse não parece ser o caso do PHP.
Posso fazer algo errado no PHP quando começo sempre null
no lado esquerdo? Posso manter meu comportamento em Java ou preciso me treinar para fazer outra coisa ao lidar com as condições do PHP?
php
object-oriented
code-quality
conditions
Wizard Of Tech
fonte
fonte
null = $a
é tarefa enull != $a
é comparação, você quis dizernull == $a
?null = $a
não funcionará, e sim em tarefas, a ordem de interpretação é significativa - e também não funcionaria em Java. Estamos falando de condicionais ou atribuição?Respostas:
Eu recomendo que você sempre use os estritos operadores de comparação
===
e,!==
se possível. Você saberá quando realmente precisa de operadores de comparação soltos.Mal-entendidos
Eu acredito que você pode estar confuso sobre algumas coisas:
Não,
O PHP avalia as condições da esquerda para a direita, mas para quando o resultado é conhecido:
Se
expr1
avalia quefalse
,expr2
se não ser avaliada. Isso é chamado de curto-circuito e não parece muito bem documentado - não consegui encontrar nenhuma outra nota oficial sobre o assunto, exceto pelo comentário no Exemplo # 1. É um recurso bem conhecido , no entanto.Falácias
Ergo: nada - não sequitur. A conclusão não segue da premissa. Usando
constant == $variable
ou$variable == constant
não está conectado a um curto-circuito , ordem de avaliação ou precedência do operador .Comportamento indefinido
Ambos os operandos de
!=
são sempre avaliados. No caso do PHP, a ordem de avaliação (que é irrelevante aqui) é na verdade não especificada (como ausente na documentação).fonte
"nor is there in Java to my knowledge."
li a seção 15.7, mas não é importante aqui . Desde que você não tenha efeitos colaterais em sua comparação (como no exemplo), a ordem da avaliação não importa. Qual parte você considera ofensiva?Em relação ao seu caso específico, outra abordagem seria usar a função php integrada is_null. Então você terminaria com is_null ($ mixedValue), que faria todo o trabalho para você e faria a comparação de tipos e tudo mais.
fonte
@ phant0m: OK, ponto escolhido ... NUNCA USE! = ou == sempre use! === e === quando você codifica com PHP. Portanto, essa pergunta estava errada no início e não há práticas recomendadas com NULL nos dois lados da condição quando se trata de PHP.
fonte
$a == NULL
codifica intenção,NULL == $a
adiciona uma proteção), e essa segurança não é tão forte assim porque você ainda depende de trabalho manual (hábitos) em vez de verificações automatizadas invencíveis. Não acho que a troca valha a pena, mas isso é uma questão de opinião pessoal.23 == num_apples
) em vez de "se você tiver vinte e três maçãs" (num_apples == 23
) .>
e<
, vou ler mais como "Se esse for maior", depois lerei o que deve ser maior para a condicionalidade passar, depois para o outro lado.