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