Re: Problem with loose typing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Chris Boget wrote:
> Consider the following:
>
>   function test() {
>     static $i = 0;
>
>     $i++;
>     $retval = ( $i <= 10 ) ? $i : '';
>
>     return $retval;
>
>   }
>   while( $bob = test()) {
>     echo $bob . '<br>';
>
>   }
>
> You would expect the while loop to go on forever just looking
> at the above code.  However, what's happening is that when the
> empty string is getting returned due to $i being > 10, the while
> loop is resolving FALSE when $bob is set to the value of the
> empty string.
> Is there any way that I can force this not to happen?  That the
> while loop resolves as FALSE only when the function actually
> returns a (boolean) FALSE value?

The easiest thing is to change the '' in your ternary operator to TRUE.

TRUE ain't never gonna evaluate to FALSE in PHP.  Well, I guess you could
hack the source to make that happen, if you were bored enough...

Another option is to use === to test $bob explicitly against '' and/or
FALSE so that PHP's loose type conversion doesn't confuse you.

You could even change '' to 'LOTS AND LOTS' so that after 10, you see
'LOTS AND LOTS'

Or, if you were wanting this to actually be useful, you could do something
like:

$retval = ($i <= 10) ? $i : ('~10^' . log($i, 10));

For the English majors, I imagine there's a http://php.net/printf input
that would let you get things like 'hundreds', 'thousands', 'millions',
etc.

-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux