Edit report at https://bugs.php.net/bug.php?id=64324&edit=1
ID: 64324 Updated by: ras...@php.net Reported by: dosergio at ig dot com dot br Summary: Why 0 == 'BOOK' ? Status: Not a bug Type: Bug Package: *General Issues Operating System: all PHP Version: Irrelevant Block user comment: N Private report: N New Comment: No it doesn't make more sense. This would make 12=='TEST' You cast to a type in the comparison, not to some third type. Besides changing this would break millions of lines of code. Not going to happen. Previous Comments: ------------------------------------------------------------------------ [2013-03-02 01:19:42] dosergio at ig dot com dot br A good rule to be implemented by PHP is: If a comparison of simple equality ( == ) or simple inequality ( != ) is done between two different data types, PHP should cast both to boolean before comparing. Because 'TEXT' casts to true, 0 casts to false so 0 != 'TEXT' makes more sense than 0 == 'TEXT'. ------------------------------------------------------------------------ [2013-02-28 19:12:25] dosergio at ig dot com dot br OK, you are right. That was the explanation I wanted: it depends on the type you compare. if( false == 'TEST') works correctly. Now it makes a little more sense to me. But javascript is still superior because inside a if() I suspect that any language should try to cast both to boolean. ------------------------------------------------------------------------ [2013-02-28 19:04:24] ras...@php.net We don't want a special case for 0. By your logic 12 == 'TEST' should be true. You are assuming a cast to boolean even though neither side of the comparison is a boolean. Note that true == 'TEST' will match because here we cast to boolean. But 'TEST' cast to an integer is going to give you 0. ------------------------------------------------------------------------ [2013-02-28 18:58:51] dosergio at ig dot com dot br Conclusion: The exact analysis above done in javascript says I am right. I have no doubt that javascript makes more use of logic that php. ------------------------------------------------------------------------ [2013-02-28 18:51:56] dosergio at ig dot com dot br I know the use of ===. The supposed 'bug' that I think exists, is comparing 0 to a non-empty String with double == My concern is because: Observation 1: null, 0, "0", and "" all result as FALSE. Observation 2: BUT... "A STRING" evaluates as TRUE. SO... 0 == "" makes sense BUT... 0 == "A NON-EMPTY STRING" makes no sense. IMHO False would be the right answer. Take a little time to examine this: if( 0 ) echo "0 works as TRUE<br>"; else echo "0 works as false <br>"; if( "TEST") echo "'TEST' works as TRUE<br>"; else echo "'TEST' works as false <br>"; if( 0 == 'TEST') echo "But 0 == 'TEST' belies the statements above!"; ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=64324 -- Edit this bug report at https://bugs.php.net/bug.php?id=64324&edit=1