wolf_22 — 2013-05-10T08:46:56-04:00 — #1
I came across a method today that has the following at the end of it:
return in_array($id, $arr) && in_array($this->id, $arr);
Now help me understand this... That line basically says, "return TRUE if BOTH in_array functions return TRUE," correct? Otherwise, I'm assuming it would return FALSE because no other return statements exist in the method.
Is the form that's used here done a lot? I've never seen it done this way... Usually, you only see a singular return statement.
fretburner — 2013-05-10T08:56:21-04:00 — #2
Yeah you're right about what it does. As long as the expression after the return statement only evaluates to a single value then PHP won't have a problem with it.
scallioxtx — 2013-05-10T14:37:06-04:00 — #3
in_array returns a boolean -- true if the element is in in the array, false if it's not
expression && expression "returns" (or evaluates to) a boolean -- true if both expressions are true, false if either or both expressions are false
So in total the function returns a boolean -- true if both elements are in their respective arrays, or false if either or both elements aren't in their respective arrays.
This form isn't used a whole lot, but you do see it every once in a while.
Another thing I'm reminded off by looking at this is that the following also confuses people a lot
public function foo()
return $this->somevar = 5;
- returns 5, AND
- sets $this->somevar to 5
at the same time (compare to
if (($pos = strpos($haystack, $needle)) !== false) which can be similarly confusing)
For a complete list of logical operators like && see http://php.net/manual/en/language.operators.logical.php
starlion — 2013-05-10T17:01:54-04:00 — #4
for readability, i'd have wrapped it in a set of parenthesis (just to avoid potential confusion of precedence; does it evaluate as (return function1()) && function2() or return (function1() && function2()) ), but yeah...