Re: [RFC] Deprecate the extract function in PHP 7.3
| From: | ilija dot tovilo at me dot com | Date: | Fri, 15 Sep 2017 17:35:57 +0000 |
| Subject: | Re: [RFC] Deprecate the extract function in PHP 7.3 | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-100640@lists.php.net to get a copy of this message | ||
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 <ocramius@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.tovilo@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
> >
> >
> >