On Tue, Feb 23, 2021 at 5:12 PM Nikita Popov <nikita....@gmail.com> wrote:

> On Tue, Feb 23, 2021 at 4:52 PM Guilliam Xavier <guilliam.xav...@gmail.com>
> wrote:
>
>> On Fri, Feb 5, 2021 at 2:10 PM G. P. B. <george.bany...@gmail.com> wrote:
>>
>> > Greetings internals,
>> >
>> > While working on rewriting the PHP docs about errors and error handling
>> [1]
>> > I came across a change of behaviour in an edge case of an edge case.
>> >
>> > finally blocks are meant to be always executed regardless that an
>> Exception
>> > has been thrown or not, which it does, however a call to exit() (or
>> die()
>> > as they are aliases).
>> > This can be seen with the following example: https://3v4l.org/6Tger
>> >
>> > However, there is one case where finally blocks are executed when
>> exit() is
>> > used, namely when a generator has a finally block and exit() is called
>> > during its traversal, an example of this in action can be seen here:
>> > https://3v4l.org/HGKHS
>> >
>> > The behaviour of this edge case of an edge case is highly dependent on
>> the
>> > version of PHP where this is run, PHP 5.5, 5.6, 7.0, early version of
>> PHP
>> > 7.1, PHP 7.2.0, PHP 7.2.1, and PHP 8.0 all run the finally block on
>> exit().
>> > Later versions of PHP 7.1, 7.2.2 and above and PHP 7.3 and 7.4 all skip
>> the
>> > finally block.
>> >
>> > Frankly this is already going to be a mess to document, but this begs
>> the
>> > question is there a "bug" in executing the finally blocks in generators
>> > during a call to exit() or is the "bug" to not execute finally blocks
>> when
>> > exit() is called.
>> >
>> > I've CCed the PHP 8.0 RMs as if the consensus is that skipping finally
>> > blocks after a call to exit() is performed it would be wise to change
>> this
>> > behaviour in PHP 8.0 only and land this ASAP, even though it's a BC
>> break.
>> >
>> > Interested in hearing your thoughts.
>> >
>> > Best regards,
>> >
>> > George P. Banyard
>> >
>> > [1] https://github.com/php/doc-en/pull/320
>> >
>>
>> Hello again,
>>
>> From my message from two weeks ago, my understanding is that finally
>> blocks
>> are *never* supposed to be executed on exit(), and that there is indeed a
>> bug (regression) with generators.
>>
>> With PHP 8.0.3RC1 having been released without any reply here from the
>> people CCed, maybe you should open a bug report?
>>
>
> Finally blocks are intended to be always executed when destructors are
> executed. The fact that they are not yet executed for exit() outside
> generators is a known bug. (For generators, finally is part of the
> destructor, which is why the issue does not appear there.)
>
> Regards,
> Nikita
>

Thanks for replying.  So it seems that I had it all backwards ^^'

For the record, this comment may help understanding:
https://github.com/php/php-src/pull/5243#issuecomment-598664651

-- 
Guilliam Xavier

Reply via email to