Re: Ranges for case statement and a WTF moment.

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

 



On 5 April 2011 16:28, Richard Quadling <rquadling@xxxxxxxxx> wrote:
> Hi.
>
> I just wanted to quickly see if PHP supported ranges in its
> switch/case statement (http://en.wikipedia.org/wiki/Ellipsis)
>
> <?php
> $s = intval(date('s'));
> switch($s)
> Â Â Â Â{
> Â Â Â Âcase 0...9 Â : echo 'Between 0 and 9'; break;
> Â Â Â Âcase 10...19 : echo 'Between 10 and 19'; break;
> Â Â Â Âcase 20...29 : echo 'Between 20 and 29'; break;
> Â Â Â Âcase 30...39 : echo 'Between 30 and 39'; break;
> Â Â Â Âcase 40...49 : echo 'Between 40 and 49'; break;
> Â Â Â Âcase 50...59 : echo 'Between 50 and 59'; break;
>    Âdefault   Â: echo 'Unknown : ', $s;
> Â Â Â Â}
> ?>
>
> Completely unexpectedly, the above code runs but produces the wrong output.
>
> Interestingly, altering the number of dots and adding spaces all
> result in parse errors ...
>
> case 0..9 : // 2 dots, no spaces
> case 0 .. 9 : // 2 dots, with spaces
> case 0 ... 9 : // 3 dots, with spaces
>
> It was confusing that the initial code ran without a parse error, but
> considering that it did, it would suggest that the case values are
> actually meaningful in some way.
>
> php -r "var_dump(10...19);"
>
> Interesting output ...
>
> string(6) "100.19"
>
> And that took me a little while to work out.
>
> It's all to do with PHP's type juggling.
>
> 10...19
>
> What I'm not sure is why the middle empty string is output as 0.
>
> "10" . . ".19" becomes "10" . "0" . ".19" which becomes "100.19"
>
> Oddly, more . don't work.
>
> php -r "var_dump(10....19);"
>
> all result in parse errors.
>
> I don't know if this is a "bug" per se, but it is an oddity that I
> though I'd share.
>
> And what is even more surprising is that the initial code works in the
> PHP V4.0.0. So maybe an 11 years old bug.
>
> You really would have thought I'd have more to do with my time!
>
> Regards,
>
> Richard.

Just tested PHP V3.0.11 and I get the same response.

Seems that this is just the way it is.

An oddity for since 1999-06-26 at least.

Richard.
-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

-- 
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