-5
\$\begingroup\$

Which is good to use and why?

if ($a == 3) {
  //do something
}

Or

 if (3 == $a) {
      //do something
  }
\$\endgroup\$
4
  • \$\begingroup\$ Id say this isn't a question for code review, as there isn't any code to review ! \$\endgroup\$ – Dan Jul 5 '18 at 20:24
  • 1
    \$\begingroup\$ This isn't a code review, but it is a interesting question. The last snippet is called Yoda notation. The Symfony Coding Standards require Yoda notation, but PSR, Slevomat and Squiz don't. \$\endgroup\$ – Stephan Vierkant Jul 5 '18 at 20:58
  • \$\begingroup\$ @Stephan and OP: It's considered a bad practice in most other languages. Relevant Software Engineering answer. \$\endgroup\$ – Mast Jul 5 '18 at 21:03
  • \$\begingroup\$ I agree. One of the few rules in the Symfony Coding Standard I don't agree with. \$\endgroup\$ – Stephan Vierkant Jul 5 '18 at 21:10
3
\$\begingroup\$

Neither and both.

The 'both'

x == $assignedVariable is a method of defensive programming which is aimed at preventing accidental assignment if someone was to use $x = 3 by mistake. Whether this offers value is debatable; modern systems exist which catch these mistakes, IDE' can flag this easily and its a bit moot given that someone can accidentally do $x = 3 just as easily as 3 = $x. The difference is assignment vs exception.

The 'neither'

You are using a truthy condition(==) which in your example should be changed to a value and type check(===). Truthy checks absolutely still do have a place but within the confines of your example a type check is definitely suitable. Take the following example which should highlight the point.

var_dump($a == 3); // true
var_dump($a === 3); // true
var_dump($a == "3"); // true
var_dump($a === "3"); // false
\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged or ask your own question.