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?

-- 
Guilliam Xavier

Reply via email to