The main purpose of this RFC is *not* to improve the exception system of
PHP but to improve the code logic/hierarchy.

Using this like loop (for/foreach etc.) you can skip a lot of parent
callers for a desired purpose by example.

I agree with you in the sens were this can complicate significantly the
debug/trace process, but IMO, there's more benefits than inconvenience.

Also I agree with you too, were it can lead in a sort of "spaghetti code"
feature (like Goto operator is...), but which language is not a bit
"spaghetti" today?

But my request is not to have a fully dynamic nested return, but a
"controlled" dynamic nested return. I would not see this to be improved:

return $something, $nesting_level;

If I remember that feature has been removed in continue/break as of php
5.4, so this isn't that hard, right? :)


Georges.L

2015-03-21 14:20 GMT+01:00 Benjamin Eberlei <kont...@beberlei.de>:

>
>
> On Sat, Mar 21, 2015 at 1:13 PM, Georges.L <cont...@geolim4.com> wrote:
>
>> Hi php internals,
>>
>> After some long and deep research i finally decided to write my first RFC
>> about a feature i'd be interested to be improved in the php core: *Nested
>> enclosing returns*
>>
>>
>>
>> The main purpose, as the title say, is to have the possibility to nest
>> multiple return like we can do currently with break/continue.
>>
>> I thinks it'll being better with a scheme:
>>
>>
>>
>>
>> function foo($foo = true)
>> {
>>    if(!$foo)
>>    {
>>       return false, 3;// Please note the second return argument is the
>> return nesting level
>>    }
>>    else
>>    {
>>       return true;// Default nested return argument is always equal to
>> 1 (if not specified, current)
>>    }
>> }
>>
>> function bar($foo = true)
>> {
>>    foo($foo);
>>    // Some stuff that will never be executed if $foo == false and
>> nested return argument = 2
>>    echo 'Hi jon !';
>> }
>>
>> function baz($foo = true)
>> {
>>    echo 'Hi bertie !';
>>    foo($foo);
>>    // Some stuff that will never be executed if $foo == false and
>> nested return argument = 3
>>    echo 'Hi freddy !';
>> }
>>
>>
>> baz(true);  // Display:
>>          //  Hi bertie !
>>          //  Hi jon !
>>          //  Hi freddy !
>>
>> baz(false);  // Display:
>>          //  Hi bertie !
>>
>>
>> Benefits:
>> -Wont break compatibility
>> -May improve code interpretation speed due to part of code skipped by the
>> nested return.
>> -Allow "dynamic" return expressions.
>>
>> Inconveniences:
>> -May complicate debug/backtrace
>>
>
> Hi Georges,
>
> In my opinion this is a bad idea.
>
> With break/continue/goto the jumps are restricted to only one function
> body to explicitly reduce the complexity in understanding them.
>
> With your proposal, as a user of a function I wouldn't know how deep a
> function returns. This can easily lead to extremely unexpected behavior.
>
> This is why exceptions are better for jumps up the call-stack, because
> they give the caller an explicit way of either accepting or catching the
> jump.
>
>>
>>
>> Regards,
>> Georges.L
>>
>
>

Reply via email to