On Tue, Feb 13, 2018 at 9:03 PM, Pedro Magalhães <m...@pmmaga.net> wrote:
> Hi internals, > > I want to bring up this RFC once again given that now seems to be the right > timing for it. I have previously canceled the vote when I initially > proposed this to land on 7.2 which was seen as too big of a BC for a minor > version. On a second attempt targeting 8.0 I have also canceled the vote as > the inclusion of a deprecation notice in cases where the behavior will > change warranted further discussion. > > To address these issues, the current version of the RFC will have 2 > separate votes: > - Introduce the new behavior on 8.0 > - Introduce a deprecation notice on 7.3 > > For those not familiar with the RFC, the general idea is that currently, > any array that has a number n as it's first numeric key will have for it's > next implicit key either n+1 if n >= 0 or 0 if n < 0. This RFC proposes to > make this consistent by always using n+1 regardless of the sign of n. > In code: > $a[-2] = true; // Current: Key is -2, RFC: Key is -2 > $a[] = true; // Current: Key is 0, RFC: Key is -1 > $a[] = true; // Current: Key is 1, RFC: Key is 0 > > I invite you to read the full RFC: > https://wiki.php.net/rfc/negative_array_index and bring up any issues you > see with the current version before the voting period starts. > > Looking forward for any feedback. > > Regards, > Pedro Magalhães > I like the change, but I'm concerned about the technical impact that deprecation notice will have. An error handler can convert the notice into an exception, which means that zend_hash_next_index_insert is now going to be a throwing operation. Apart from the fact that the currently linked implementation is not exception-safe (if the deprecation notice throws, the element is still inserted), it's quite likely that at least some of the >250 uses of zend_hash_next_index_insert will not deal with exceptions correctly. Nikita