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