Re: I know this is not easy and I'm not stupid but...

From: Date: Fri, 10 Aug 2007 00:49:00 +0000
Subject: Re: I know this is not easy and I'm not stupid but...
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-260544@lists.php.net to get a copy of this message
Please include the list when replying. Phil Curry wrote:
Phil Curry wrote:
how can this be? This is not the first time I've run into a situation like this. What am I missing?
line 102    echo  ($userValues['afterDark']);             // outputs 1
line 103    if ( $userValues['afterDark'] == 0 ) {        // passes
Add a line at 102.5... var_dump($userValues['afterDark']); What type is that variable?
Don't have to do a dump, I know its a tinyint(1), not null, default 0
That would be the type in the database, not the type of that variable at that time. -Stut --http://stut.net/
Absolutely right. didn't think of that. var_dump($userValues['afterDark']); ==> string(1) "1" but then I'm comparing a string to an int and the result always seems to pass. So does that mean any string compared to any int will be true? By casting (int)$userValues['afterDark'] the test still passes and var_dump shows the (int)$userValues['afterDark'] as an int(1) but does give a value like the previous example. ie. string(1)"1" but only int(1) Not sure if the expression has a value of "1" now that its been cast.
Then finally  if ( (int)$userValues['afterDark'] === 0 ) {        // passes
So:
if ( $userValues['afterDark'] == 0 ) {                  // passes
if ( (int)$userValues['afterDark'] == 0 ) {           // passes
if ( (int)$userValues['afterDark'] === 0 ) {         // passes
And the value of afterdark in the mysql table is tinyint(1) 1.
And echo( 1+(int)$userValues['afterDark']);    // outputs 2
Now I'm confused! -Phil

« previous php.general (#260544) next »