Hey,

During my free time, I'm implementing that specific `array_keys`
optimization. I'm not planning on supporting cases like yours (i. e.
indirection through a variable) since there's no point in doing that. And
also, it's not feasible to support every use case. Should we also support
cases like this?

```php
$a = 'array_keys';
$b = $a(...);
$c = 'b';

foreach ($$c as $key) {
    ...
}
```

Obviously not. `\array_keys` optimization will work the same way as an
optimized `strlen` function works.

That means that the optimization is only going to be applied if the
`array_keys` function is used directly in the `foreach` loop and only if a)
either the namespace is global b) or `\array_keys(...)`/`use function
array_keys` is used.


Best regards,
Benas

On Tue, Sep 15, 2020, 4:23 PM Chase Peeler <chasepee...@gmail.com> wrote:

> I brought this up on another thread, but it wasn't addressed (which is
> fine, since it was somewhat off-topic). I thought it might be
> worth bringing up in its own thread, though.
>
> In the other thread, someone had mentioned the following compiler
> optimization
>
> foreach(\array_keys($arr) as $key) {
>
> and quietly transform that into:
>
> foreach ($arr as $key => $_unusedVariableNameThatIsntEvenSpilledToTheScope)
> {
>
> I would be more likely to write:
>   $keys = array_keys($arr);
>   foreach($keys as $key){
> Which would prevent me from being able to take advantage of the
> optimization.
>
> So, what I was wondering, is if there are other optimizations I might be
> missing out on, and if so, are they documented anywhere?
>
>
> --
> Chase Peeler
> chasepee...@gmail.com
>

Reply via email to