> I'd rather hope for `compact()` to finally be deprecated and targeted for
removal 😛

I think compact() is a good function for transferring variables from one
point to another, but I would think about making improvements as it is
confusing (uses the variable name, rather than the variable itself).

Regarding the bug, if we use an array it should work perfectly:

$x = 123;
(fn() => [ 'x' => $x ])();

https://3v4l.org/ov7TM

Would it be possible to automatically convert compact() to an array at
runtime? So I imagine that any necessary optimization can take place
directly over the resulting array, rather than the compact itself.


Atenciosamente,
David Rodrigues


Em qua., 19 de out. de 2022 às 14:09, Marco Pivetta <ocram...@gmail.com>
escreveu:

> On Wed, 19 Oct 2022, 19:04 David Rodrigues, <david.pro...@gmail.com>
> wrote:
>
>> Hello!
>>
>> I'm converting my code to use short closures where possible, and I ran
>> into
>> a problem using compact().
>>
>> Basically, the names used in compact() cannot be accessed due to a bug,
>> reported in 2019 still in PHP 7.4 (ID 78970).
>>
>> https://bugs.php.net/bug.php?id=78970
>>
>> It seems to me to be a reasonable problem and one that needs attention, as
>> the message is not that "compact cannot be used here", but that "the
>> variable does not exist".
>>
>> The code below may reproduce the problem:
>>
>> $x = 123;
>> (fn() => compact('x'))();
>>
>> https://3v4l.org/AFARs
>>
>> Is there any possibility of this being fixed? I would love to help, but I
>> don't have much C programming skills, unfortunately.
>>
>
> I'd rather hope for `compact()` to finally be deprecated and targeted for
> removal 😛
>
> The fact that it still exists precludes (or at least complicates) future
> optimization of scope + inlining in the engine.
>
> Similar thoughts towards `extract()`, I'd say.
>
>

Reply via email to