Skip to content

Instantly share code, notes, and snippets.

@astorm
Last active January 3, 2016 14:59
Show Gist options
  • Save astorm/8480121 to your computer and use it in GitHub Desktop.
Save astorm/8480121 to your computer and use it in GitHub Desktop.

Assuming

$method = array('I am','sparticus');

In the statment

$oneMethod = count($methods) <= 1;

The call to count($methods) always returns an int (see its return type on the count page), In our example that int is 2

$oneMethod = 2 <= 1;

And then 2 <= 1 resolves to a boolean, because 2 is not less than or equal to 1.

$oneMethod = false;

In the second example

$oneMethod = (count($methods) <= 1) ? true : false;

Again, we have count($methods) resolving to an int.

$oneMethod = (2 <= 1) ? true : false;

And then (2 <= 1) resolves to a boolean.

$oneMethod = false ? true : false;

And then ternary statment resolves to false (the first part of the ternary is true, which means it resolves to the third part after the :.

Finally, personal opinion, neither form is particularly ideal. The ternary statment is redundant (true ? true : false;), and while the first form

$oneMethod = count($methods) <= 1;

doesn't have that redundancy, it does look a bit like the bitwise operators, which could potentially cause confusion amoung a certain class of developers. I usually prefer something like this

$oneMethod = true;
if(count($methods) > 1)
{
    $oneMethod = false;
}

Slightly more code, but it's hard to mistake that for something else. We can leave the argument about if style braces to others.

@brendanfalkowski
Copy link

Thanks, I'd much rather have beginner-friendly code before the most terse. Assignments are easier to understand with explicit values rather than implied. A few years ago I would have balked at the ternary too, but I do like the (redundant) clarity and shortness.

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