ID:               48192
 User updated by:  skds1433 at hotmail dot com
 Reported By:      skds1433 at hotmail dot com
 Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: vista
 PHP Version:      5.2.9
 New Comment:

To me, the whole 'dangling else' is a paradox.

Wouldn't it seem more complete if that dangling 'else' was interpreted
for both 'if'?

If 'if a then if b then s1 else s2' was interpreted like this (below),
I personally see no paradox. It just seems to me, like a paradox for the
fact that this isn't how it's interpreted.

if (a)
{
        if (b)
        {
                s1
        }
        else
        {
                s2
        }
}
else
{
        s2
}

I'm not looking for a solution, since there's probably 20 different
ways to solve that. I'm just suggesting what might be a better way.


Previous Comments:
------------------------------------------------------------------------

[2009-05-08 18:39:20] random-passer-by at hello dot world

This is a twist on the Dangling Else problem:
http://en.wikipedia.org/wiki/Dangling_else

I find your solution more confusing and incompatible than what I've
seen in any other other programming language.

This should achieve the correct result and avoid the extra foo
comparisons without a language change:

function routine ($foo, $bar)
{       
        do {
                if ($foo === 0) { echo "foo is 0\n"; break; }
                elseif ($foo === 1)
                        if ($bar === 0) { echo "bar is 0\n"; break; }
                        elseif ($bar === 1) { echo "bar is 1\n"; break; }
                echo "foo: ".$foo.", bar: ".$bar."\n";
        } while (0);
}

------------------------------------------------------------------------

[2009-05-08 17:04:59] skds1433 at hotmail dot com

Description:
------------
I'm requesting a way for the 'if' control struction to be able to
inherit 'else' control structures, in a similar matter as below. This
will help prevent duplicated code, and help keep it clean and
uncluttered.

I've included an 'expected_equivalent', which is actually less code
than in the 'routine' function. However, if a developer wishes to
include a greater diveristy, it can become a real advantage to use just
one 'else'.

Additionally, it I think it would be benefitional for 'if' control
structure to make it more 'complete'.

I also understand there are already numerous ways to do this, which
have the same result and possibly even less code. Nonetheless, I believe
this way could be a better, easier way for certain situations.

Reproduce code:
---------------
<?php
function routine ($foo, $bar)
{
        if ($foo === 0) echo "foo is 0\n";
        elseif ($foo === 1)
                if ($bar === 0) echo "bar is 0\n";
                elseif ($bar === 1) echo "bar is 1\n";
                        else echo "foo: ".$foo.", bar: ".$bar."\n";
                        # else would apply to both elseif
}

function expected_equivalent ($foo, $bar)
{
        if ($foo === 0) echo "foo is 0\n";
        elseif ($foo === 1 && $bar === 0) echo "bar is 0\n";
        elseif ($foo === 1 && $bar === 1) echo "bar is 1\n";
        else echo "foo: ".$foo.", bar: ".$bar."\n";
}

routine (0, 1);
routine (1, 0);
routine (1, 1);
routine (2, 1);
routine (1, 2);
routine (2, 2);
?>

Expected result:
----------------
foo is 0
bar is 0
bar is 1
foo: 2, bar: 1
foo: 1, bar: 2
foo: 2, bar: 2

Actual result:
--------------
foo is 0
bar is 0
bar is 1
foo: 1, bar: 2


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=48192&edit=1

Reply via email to