Naterade
Naterade

Reputation: 2675

Explanation for very odd php function return

So my code in the past needed a variable to run through 2 functions and then return the value as such.

 function 1($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
 }

 // pass the return to next function

function 2($variable) {
    check($variable);
    return $variable // either a -1, -2 or true;
}

On the next check it returns a message to the user as such:

  if($variable == -1) // display message
  if($variable == -2) // display message
  if($variable == true) // display message

Now, per requirement of work the variable must go through a 3rd function check still returning a -1, -2 or true and then go onto the final if statements for display. Now this is where it gets odd. If I keep it at 2 functions the if statements work, however if I run it through the 3rd check function I need to format my if's like this in order to correctly check the return:

if($variable === -1) // display message
if($variable === -2) // display message
if($variable === true) // display message

Notice I have to add the 3rd '=' symbol. I just can't figure out why this is happening. Is this normal by some PHP law I don't know about or is this a bug?

Upvotes: 0

Views: 68

Answers (3)

ioseb
ioseb

Reputation: 16951

This is not odd behavior, it's very natural for PHP.

Following expression:

if ($variable == true) {
}

means that PHP will cast left operand to less pretensive type(in this case BOOLEAN) and do comparison after this. Which obviously will result in TRUE if $variable value is not 0 or FALSE or NULL or ''

In second case i.e. === there is strict check value and type of both operands are compared.

Upvotes: 1

RandomWhiteTrash
RandomWhiteTrash

Reputation: 4014

Your code does not show how you call the functions and store returns, there may be a problem. Plus, I suppose you called function 1 and 2 only for illustration because as you know you cant start name of the function with a number.

=== is 'equals exactly' (value and type). Often used for logical tests, because sometimes you need to distinguish 0 from false and 1 from true.

Upvotes: 0

Blender
Blender

Reputation: 298176

The triple equals sign (===) only returns true if the two objects being compared are identical (of the same type and value), not just equal.

For example:

$a = 1;
$b = "1";

echo $a == $b;  // True
echo $a === $b; // False

Upvotes: 1

Related Questions