[PHP-DB] weird comparsion
Hello, Why does anything compared to 0 return true? I know it might seem to be a bit off-topic, but for me it is important for detecting if NULL value in table has been changed (for example NULL is changed to 0). if (foo==0) echo(foo equals to 0); OKi98 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] weird comparsion
http://nl3.php.net/manual/en/language.operators.comparison.php try using === (3x =) for comparison - Mike OKi98 schreef: Hello, Why does anything compared to 0 return true? I know it might seem to be a bit off-topic, but for me it is important for detecting if NULL value in table has been changed (for example NULL is changed to 0). if (foo==0) echo(foo equals to 0); OKi98 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] weird comparsion
try comparing the type: if(0 === 0)echo 'Its not equal'; if(0 === 0)echo 'Its equal'; OKi98 wrote: Hello, Why does anything compared to 0 return true? I know it might seem to be a bit off-topic, but for me it is important for detecting if NULL value in table has been changed (for example NULL is changed to 0). if (foo==0) echo(foo equals to 0); OKi98 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] weird comparsion
Mike van Hoof wrote: http://nl3.php.net/manual/en/language.operators.comparison.php try using === (3x =) for comparison - Mike OKi98 schreef: Hello, Why does anything compared to 0 return true? I know it might seem to be a bit off-topic, but for me it is important for detecting if NULL value in table has been changed (for example NULL is changed to 0). if (foo==0) echo(foo equals to 0); OKi98 __ Informace od NOD32 2235 (20070502) __ Tato zprava byla proverena antivirovym systemem NOD32. http://www.nod32.cz I know about identity operator (===) but with == operator 0 is false and foo is true, try this: $foo=0; $bar=bar; if ($foo) echo($foo is true, ); else echo($foo is false, ); if ($bar) echo($bar is true, ); else echo($bar is false, ); if ($foo==$bar) echo($foo==$bar); returns 0 is false, bar is true, 0==$bar OKi98 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP-DB] weird comparsion
On 03 May 2007 12:30, OKi98 wrote: I know about identity operator (===) but with == operator 0 is false and foo is true No, that's not correct. , try this: $foo=0; $bar=bar; if ($foo) echo($foo is true, ); else echo($foo is false, ); if ($bar) echo($bar is true, ); else echo($bar is false, ); if ($foo==$bar) echo($foo==$bar); returns 0 is false, bar is true, 0==$bar That's because you've got loads of implicit type conversions going on there, so you're not comparing like with like. For if ($foo) ... and if ($bar) ...: within the context of the if(), both $foo and $bar are implicitly converted to Boolean: - (bool)0 is FALSE - (bool)any non-empty() string is TRUE On the other hand, for if ($foo==$bar) ...: in the context of the == comparison, $bar is converted to a number, and any string not beginning with a numeric character converts to numeric zero -- so you get a comparison of zero with zero, which is, of course, TRUE! Or, in other words, (bool)$foo!==(bool)$bar, BUT (int)$foo===(int)$bar It's exactly when you *don't* want this kind of automatic type-conversion shenanigans going on that you should use the === operator to make your intent entirely clear -- otherwise you have to be extremely aware of the context in which you are evaluating your variables in order to avoid hidden surprises like this. Cheers! Mike - Mike Ford, Electronic Information Services Adviser, JG125, The Headingley Library, James Graham Building, Leeds Metropolitan University, Headingley Campus, LEEDS, LS6 3QS, United Kingdom Email: [EMAIL PROTECTED] Tel: +44 113 812 4730 Fax: +44 113 812 3211 To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm
Re: [PHP-DB] weird comparsion
Ford, Mike wrote: On 03 May 2007 12:30, OKi98 wrote: I know about identity operator (===) but with == operator 0 is false and foo is true No, that's not correct. , try this: $foo=0; $bar=bar; if ($foo) echo($foo is true, ); else echo($foo is false, ); if ($bar) echo($bar is true, ); else echo($bar is false, ); if ($foo==$bar) echo($foo==$bar); returns 0 is false, bar is true, 0==$bar That's because you've got loads of implicit type conversions going on there, so you're not comparing like with like. For if ($foo) ... and if ($bar) ...: within the context of the if(), both $foo and $bar are implicitly converted to Boolean: - (bool)0 is FALSE - (bool)any non-empty() string is TRUE On the other hand, for if ($foo==$bar) ...: in the context of the == comparison, $bar is converted to a number, and any string not beginning with a numeric character converts to numeric zero -- so you get a comparison of zero with zero, which is, of course, TRUE! oh I didnt know that, I thought the number will be converted into a string. Thanks alot. I have one more question but I ask in separate thread :) Oki98 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php