--- Eugene Lee <[EMAIL PROTECTED]> wrote:
> : switch (true)  {
> :      case ($var === 'TEST-1')?true:false:
> :      case ($var === 'TEST-2')?true:false:
> :      case ($var === 'TEST-2')?true:false:
> :        do something
> : }
> 
> Oh man, that's just sick...

Partially because it's unnecessarily complex. This is like saying:

if ($var === 'TEST-1')
{
     $expression = true;
}
else
{
     $expression = false;
}

if ($expression)
{
     ...

While the ternary operator makes this redundancy less obvious, it only adds to
the complexity and lack of readability. Consider the following code as a
substitute for the above example:

if ($var === 'TEST-1')
{
     ...

Hopefully that part is clear. Now, on to the original question. Try this
example:

<?
$foo = 'bar';
switch (true)
{
        case ($foo === 'notbar'):
                echo 'A';
                break;
        case ($foo === 'bar');
                echo 'B';
                break;
        default:
                echo 'C';
                break;
}
?>

This should output B. You will also notice that it "works" when you switch on
$foo instead of the boolean true, but this is misleading. PHP converts $foo to
the boolean true when comparing to the expressions, because we set it to the
string bar. To understand this point further, try this example:

<?
$foo = 0;
switch ($foo)
{
        case ($foo === 'notbar'):
                echo 'A';
                break;
        case ($foo === 0);
                echo 'B';
                break;
        default:
                echo 'C';
                break;
}
?>

This should also output B. That seems to be wrong, but in this case it is
comparing each expression to $foo, which is the integer 0 in this case, so it
evaluates to false. So, you will see A, because ($foo === 'notbar') also
evaluates to false.

Recap:
1. You can switch on anything, including boolean values.
2. Your cases can be expressions to be evaluated.

Hope that helps.

Chris

=====
Become a better Web developer with the HTTP Developer's Handbook
http://httphandbook.org/

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

Reply via email to