Hi Marco I can see it’s usefulness in this case.
But wouldn’t it be better to implement this by hand in these rare cases (it’s 3 lines of code) instead of encouraging the pollution of the symbol table by unknown input? It’s also clearer since people who don’t know the `extract` function probably don’t expect it to mutate the local symbol table. Cheers On 15 Sep 2017, 19:26 +0200, Marco Pivetta <ocram...@gmail.com>, wrote: > Heya, > > This is typically used in templating engines. > The one I worked on is > https://github.com/zendframework/zend-view/blob/5523511b6771cb6c060a77f6777426526a8db5ab/src/Renderer/PhpRenderer.php#L491-L492 > > > Marco Pivetta > > http://twitter.com/Ocramius > > http://ocramius.github.com/ > > On Fri, Sep 15, 2017 at 7:20 PM, <ilija.tov...@me.com> wrote: > > > Hi! > > > > The `extract` function takes an associative array and puts it into the > > local symbol table. > > http://php.net/manual/en/function.extract.php > > > > ``` > > $array = [ > > ‘foo’ => ‘foo’, > > ‘bar’ => ‘bar’, > > ]; > > > > extract($array); > > > > print $foo; // "foo" > > ``` > > > > As a second parameter the `extract` function takes some options to make > > this function less dangerous, like `EXTR_SKIP` that prevents an existing > > local variable of being overwritten. There’s a few more options, go ahead > > and take a look at the documentation. `EXTR_OVERWRITE` is the default one > > though. You can also pass a prefix for the variable names as a third > > argument. > > > > I seriously doubt the usefulness of this function, especially looking at > > the potential risks. The fact that overwriting the local variables is the > > default behaviour doesn’t make it any better. I suggest deprecating it in > > PHP 7.3 and removing it in 8. > > > > In a whole Symfony-Stack (3.4) with all of it’s dependencies I could only > > find two usages of this function, both of which could be easily rewritten > > in vanilla PHP: > > https://github.com/symfony/symfony/blob/master/src/ > > Symfony/Component/Templating/PhpEngine.php#L148 > > https://github.com/symfony/symfony/blob/master/src/ > > Symfony/Component/Templating/PhpEngine.php#L158 > > > > Only downside: A polyfill is probably impossible since you cannot mutate > > the local symbol table of the callee (as far as I’m aware). > > > > Any thoughts? > > > > Regards > > > > > >