Skip to content

Instantly share code, notes, and snippets.

@andrebian
Created November 21, 2013 00:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrebian/7573806 to your computer and use it in GitHub Desktop.
Save andrebian/7573806 to your computer and use it in GitHub Desktop.
Condicional
<?php
// Exemplo de implementação recebendo um post sem tratamento, o que quero esclarescer é forma de realizar a condicional apenas
$itemRecebidoViaPost = $_POST['item'];
// Primeira forma
if ( $itemRecebidoViaPost == 'item-desejado' ) {
}
// Segunda forma
if ( 'item-desejado' == $itemRecebidoViaPost ) {
}
@juniorb2ss
Copy link

A primeira forma, falando visualmente é a mais correta. Pois levando em consideração a lógica da pergunta "LAPIS é BRANCO?" invés de "BRANCO É O LAPIS?" fica meio sem nexo. A segunda forma evita o erro de digitação, caso seja colocado $lapis = 'branco' que a resposta sera sempre verdadeira, retornando mal funcionamento do seu código. Mas se fosse 'branco' = $lapis seria retornado um erro. Particularmente acho o segundo método feio, porém, útil para novatos, que acabam esquecendo da equação '=='

@pssdn
Copy link

pssdn commented Nov 21, 2013

Diferença não faz, mas ajuda na legibilidade do código. Eu por exemplo sou adepto da primeira forma, mas pra muitos programadores, principalmente iniciantes, sempre recomendo ser o mais explícito possível, utilizando a segunda forma, $var === false ao invés de ! $var, etc.

Entende o que quero dizer? Quando se está debugando o código é mais fácil compreender $var === false do que ! $var. Programar é como escrever, escreva sempre da melhor forma possível e será sempre compreendido. Utilize abreviações e gírias que poderá ter problemas de comunicação.

De toda forma, sempre é bom lembrar: vale à risca o que está descrito nas PSRs http://www.php-fig.org/

@danizord
Copy link

Eu considero a 2ª opção uma boa prática. Até pq já fiz contribuições no ZF2 e Doctrine usando a 1ª opção e na revisão me corrigiram falando pra usar a 2ª.

@netojoaobatista
Copy link

@andrebian,

Eu gosto e prefiro a primeira forma. Faço da primeira forma já faz tanto tempo, que acho estranho a segunda forma, mas é uma questão pessoal apenas.

Pensando em boas práticas, como levantado pelo @danizord, acho que a segunda forma é interessante e adequada. Alguns frameworks de testes unitários, como PHPUnit ou JUnit utilizam a segunda forma, onde o primeiro argumento é o valor esperado e o segundo o valor atual.

Porém, também não é regra nos frameworks. Se observar o Microsoft TestTools, a API do Assert está mais para o primeiro formato, que para o segundo. No caso do Assert.equals, ela considera dois objetos, independentemente da ordem. Mas se observar bem, o método Assert.instanceOfType utiliza a primeira forma mais explicitamente.

Especificamente no que se refere ao PHP, por não existir uma padronização e nenhuma documentação de referência de boas práticas sobre esse tema, ficamos na questão de preferência pessoal ou, como no caso de algum código como mencionado pelo @danizord, o padrão adotado para aquele código específico.

@filhodanuvem
Copy link

Lendo códigos de alguns frameworks sempre me deparei com a segunda forma, que pra mim soa bem estranha. Mas a resposta que me deram na época foi a mesma que o @juniorb2ss disse, por motivos históricos alguns devs fazem valor_constante == $variavel para evitar erros silenciosos no código.

Em baixo nivel, é impossível haver otimização nesse caso, o parser sempre precisaria ver os valores dos dois lados da expressão.

Então como disseram, é algo bem pessoal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment