Ross Honniball wrote:
I'm yet to be convinced it isn't a bug. I suspect it is a bug that has
been around so long that they can't afford to fix it or it may break
many applications that for various peculiar reasons rely on it to
behave as it does for their code to work.
Read this first
http://www.blueshoes.org/en/developer/php_cheat_sheet/
Then do a test here:
http://www.blueshoes.org/en/developer/syntax_exam/
Hope this will *fix* your bug !
Best Regards,
Nadim Attari
Alienworkers.com
For those who have tried to defend its behaviour, this is my logic.
1. The == operator means, by definition, "don't worry about variable
'type', just compare the values"
(This is probably the single thing I love about PHP more than
anything else)
2. If the numeric variable $x is given ANY other numeric value other
than zero, the logic behaves correctly as you read it
So it is irrational for program logic to vary between a zero value
and, for aguments sake, a numeric value of 42.
Regarding specifically TG's explanation below, I believe he is wrong.
If you compare a numeric type and a string type using ==, PHP should
convert the number to a string and compare the two from there.
Anyway, not expecting any answers to this, just a point of note and a
strange quirk to keep at the back of your head when consciously
comparing numeric / string variables.
Ross
tg-php@xxxxxxxxxxxxxxxxxxxxxx wrote:
It's because PHP is trying to convert different var types into a
common var type and then compare them when you use ==. === means
compare value AND type so that's why it fails.
Your string, 'Some kind of string' is getting converted down to the
lowest common denominator, an int. Since there are no numbers in the
string to grab onto, it gets converted to nothing, an int value of zero.
If you had $x = "0" or if $y had contained numbers at all, it
wouldn't have passed.
But this is why when you use $x.'' it works properly because now you
have "0<empty string>", it's been converted to a string value "0".
Good catch on that though, shows good methodical debugging :)
So in the future, either use === or be extra aware of your variable
types and make sure you're comparing properly.
Good luck!
-TG
= = = Original message = = =
$x = 0; // Numeric zero
$y = 'Some kind of string';
if ($x == $y) echo 'they equal using ==';
if ($x === $y) echo 'they equal using ===';
The above will echo 'they equal using =='.
The values don't look very equal to me.
Can anyone explain the logic behind this?
I'm heading home now but look forward to your explanations tomorrow.
PS
Incidently, to 'fix' it so it behaves as it should, you can code:
if ($x.'' == $y.'') echo 'this will not print and all is good.';
Regards .. Ross
--
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php