String compare on a bool
Asked Answered
M

3

13

I'm pretty sure this is a simple fundamental flaw in my newb PHP knowledge, but I was surprised when the following happened:

enter image description here

$result is TRUE... so why is it considered equal to the string "email"? I'm guessing this is because, technically, it's a bool and it isn't false? So when it's compared against a string (e.g. "email") it returns true.

Should I change my method to return as the result as a string containing "true" (instead of return true; on success), or is there another way I should be doing this?

Thanks.

Manhood answered 9/5, 2011 at 14:23 Comment(3)
Please just paste your code instead of a screenshot.Scoggins
@TJ, The reason I posted a screenshot is because it shows the contents of $result, and also that it passed the conditional test. Plus it's literally three lines of code.Manhood
AH! its not my code going against the laws of programming, its just PHP!Matson
I
15

Yes, true is equal (==) to a non-empty string. Not identical (===) though.

I suggest you peruse the type comparison table.

Innutrition answered 9/5, 2011 at 14:26 Comment(1)
Not completely correct! Empty string ("") and string zero ("0") are considered FALSE. All the others are TRUE!Kurth
G
3

It returns true because php will try to convert something to be able to compare them. In this case it probably tries to convert the string on the right side to a bool which will be true in this case. And true == true is ofcourse true.

By doing $result === "email" (triple =) you tell PHP that it shoudn't do conversions and should return false if the types don't match.

Gloss answered 9/5, 2011 at 14:29 Comment(0)
D
1

if($result === "email") will do the trick but personally I would never go this way.

Delilahdelimit answered 9/5, 2011 at 14:25 Comment(3)
Why would you never go that way?Theodoratheodore
personally I would go with 2 variables. one for a valid result, another for a previously defined error. Improves code readability, but I think it's purely a personal coding style. Should have left this annotation.Delilahdelimit
php.net/manual/en/function.strcmp.php Use a string compare function rather than ==Beset

© 2022 - 2024 — McMap. All rights reserved.