Re: [PHP-DB] weird comparsion

2007-05-03 Thread Mike van Hoof

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

2007-05-03 Thread Aleksandar Vojnovic

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

2007-05-03 Thread OKi98

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

2007-05-03 Thread Ford, Mike
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

2007-05-03 Thread OKi98

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