Extract() 有什么问题?

2022-08-30 10:55:57

我最近在阅读这个帖子,关于一些最糟糕的PHP实践。在第二个答案中,有一个关于使用的迷你讨论,我只是想知道所有的huff是什么。extract()

我个人用它来切碎一个给定的数组,例如或者我稍后清理变量的位置,因为它们已经方便地命名为我。$_GET$_POST

这是不好的做法吗?这里有什么风险?你对使用有什么想法?extract()


答案 1

我发现这只是不好的做法,因为它会导致许多变量,未来的维护者(或几周后的你自己)不知道它们来自哪里。请考虑以下情形:

extract($someArray); // could be $_POST or anything

/* snip a dozen or more lines */

echo $someVariable;

从何而来?谁能说出来?$someVariable

我没有看到从变量开始的数组中访问变量的问题,所以你真的需要提出一个很好的案例来使用,让我认为它是值得的。如果您真的担心键入一些额外的字符,那么只需执行以下操作:extract()

$a = $someLongNameOfTheVariableArrayIDidntWantToType;

$a['myVariable'];

我认为,这里关于其安全方面的评论有些夸大了。该函数可以采用第二个参数,该参数实际上可以让您很好地控制新创建的变量,包括不覆盖任何现有变量(),仅覆盖现有变量(因此您可以创建白名单)(),或向变量添加前缀()。EXTR_SKIPEXTR_IF_EXISTSEXTR_PREFIX_ALL


答案 2

现在就来吧。人们责怪工具而不是用户。

这就像反对,因为你可以用它删除文件。 是一个像任何其他函数一样的功能,明智而负责任地使用它。但不要说它本身很糟糕,那只是无知。unlink()extract()