3

How does php cast boolean variables?

I was trying to save a boolean value to an array:

$result["Users"]["is_login"] = true;

but when I use debug the is_login value is blank. and when I do conditionals like:

if($result["Users"]["is_login"])

the conditions are always false.

Then i tried doing this:

$result["Users"]["is_login"] = "true";

and it worked.

It's not much of a big deal but when I'm returning boolean values from functions i still have to convert them to strings.

zero juan
  • 199
  • 2
  • 5
  • 15
  • 1
    Are you serializing, converting to JSON, or similar somewhere in between? If not, no casting should be involved -- you're storing a value in an array and arrays do not care what type of values they contain. If after setting $result["Users"]["is_login"] = true; you immediately put that in an if condition, that if condition should fire. – Ben Regenspan Nov 13 '09 at 03:35
  • It would help to post everything in between saving the boolean and the if. – andyk Nov 13 '09 at 03:48

3 Answers3

9

there is no cast

the

if($result["Users"]["is_login"])

should work. can you try to use var_dump($result["Users"]["is_login"]); to make sure the variable has been set properly.

you can check is a variable is set or not by using the isset (manual) function.

Also you can find here how PHP evaluate the booleans:

When converting to boolean, the following values are considered FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags
Every other value is considered TRUE (including any resource).
RageZ
  • 26,800
  • 12
  • 67
  • 76
0

No casting happens in your example.
Your problem is likely somewhere else.

Would you mind to share a more complete piece of code?

Carlos Lima
  • 4,162
  • 29
  • 32
0

Try:


if((bool)$result["Users"]["is_login"] == true)
{
    // do something
}

.

And reply to one of your encounter:

but when I use debug the is_login value is blank. and when I do conditionals like:

if($result["Users"]["is_login"])

since your return value is boolean value true, in PHP it doesn't have a representation for it, therefore appear as empty (mainwhile, if the value is a boolean false, then you'll see a 0

Community
  • 1
  • 1
Trav L
  • 14,732
  • 6
  • 30
  • 39