Edit report at https://bugs.php.net/bug.php?id=64324&edit=1
ID: 64324
User updated by: dosergio at ig dot com dot br
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:
There is a solution.
See that all examples I gave were made using NON-NUMERIC texts. ('BOOK',
'TEXT', ETC) You are right thinking about numeric strings like '234'.
If text is numeric, php could continue treating them as numbers - that would be
an exception to the rule.
BUT... if the text is NOT numeric (\D+) then it could be casted to boolean.
'12' '13' '1987' would NOT be casted to boolean.
'car' 'soap' '#ffcc00' would.
"If comparing a NON-NUMERIC text ex: "book" to a number, both will be casted to
boolean before comparing".
That would solve the problem, I think.
Remember that
if(0) results false
if('BOOK') results true
so... 0 == 'BOOK' breaks the logic. Think about with calm. I will stop now.
Previous Comments:
------------------------------------------------------------------------
[2013-03-02 01:49:56] [email protected]
So by your logic 12=='13'
Do you have any idea how much code that would break?
The web is not typed. Everything comes across as strings. And everyone does
stuff
like if($_GET['age']==19) { ... }
which you are proposing to break.
Same goes for data retrieved from databases. Everything comes back as strings.
So no, this is simply not going to happen. Please stop.
------------------------------------------------------------------------
[2013-03-02 01:46:02] dosergio at ig dot com dot br
12 == 'TEXT' in the "boolean" point of view is correct.
Javascript agrees with it.
------------------------------------------------------------------------
[2013-03-02 01:40:32] [email protected]
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.
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
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