Sara++  :)

Although I prefer BAR:while (This would go better with goto if someone would want to implement that some day.) I'd settle for while BAR since I don't care about goto anyway.

So:

foreach BAZ ($arr as $val) +1


BAZ: foreach ($arr as $val) +2


foreach as BAZ ($arr as $val) -2 ('as' can be a bit confusing here)




Sara Golemon wrote:
But first, this word from our sponsor:
Group A wants anything resembling goto to burn in the fires of hell
Group B wants full non-crippled goto or nothing at all
Group C wants partial goto (non-backward jumping) or nothing at all
Groups B and C both (generally) want it called either GOTO or JUMP, not
BREAK

Since no group this size will ever come to an agreement on something this
divisive, I'd like to turn the topic to a completely different language
feature which (might) please enough people to get a rousing consensus.

Actual labeled breaks.  Not the break+jump that was proposed earlier in the
guise of a break statement, but an actual straightforward, no funny-business
labeled break which does no more and no less than the current break N;
construct, but allows the use of identifier labels rather than numbers which
may change as the result of the addition or removal of break containers.

http://libssh2.org/patches/true_labeled_break.diff

Usage:

while FOO ($condition) {
    /* statements */
    break FOO;
    /* more statements */
}

Or a stacked example:

for FOO(;;) {
    while BAR (true) {
        foreach BAZ ($arr as $val) {
            switch Foof ($value) {
                default:
                    do Plop {
                        break FOO;
                    } while (false);
            }
        }
    }
}

Notes on this implementation:

* Labels can't be repeated in an ancestral line.  For example, the parser
will throw an ERROR on the following:
while FOO(true) {
    while FOO(true) {
        break FOO;
    }
}

* Labels can be repeated by siblings.  I'm not married to this, and it
certainly has WTF potential.  This behavior is easily modified to throw an
error.  I left it permissable because there was no technical reason to
disallow it.  For example, the following is okay:
while FOO(true) {
    break;
}
while FOO(true) {
    break FOO;
}

* Labeled breaks also apply to continue;  For example:
foreach FOO($arr as $key => $val) {
    if ($key % 2) continue FOO;
    if (empty(%key)) break FOO;
}

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to