一尘不染

extract()有什么问题?

php

最近,我在一些最差的PHP实践中阅读了此线程。在第二个答案中,有一个关于的使用的简短讨论extract(),我只是想知道所有有关的内容。

我个人使用它来切分给定的数组,例如$_GET$_POST稍后在其中清理变量,因为它们已为我方便地命名。

这是不好的做法吗?这有什么风险?您对的使用extract()有何看法?


阅读 304

收藏
2020-05-26

共1个答案

一尘不染

我发现这只是一种不好的做法,因为它会导致许多变数,将来的维护者(或您自己在几周内)都不知道它们的来源。考虑这种情况:

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

/* snip a dozen or more lines */

echo $someVariable;

哪里$someVariable来的?谁能告诉?

我看不出在从阵列中访问这些变量,他们开始在这个问题,那么你真的需要展示一个良好的情况下,
使用extract()我认为这是值得的。如果您真的很担心要输入一些额外的字符,请执行以下操作:

$a = $someLongNameOfTheVariableArrayIDidntWantToType;

$a['myVariable'];

我认为这里有关安全性的评论有些夸张。该函数可以使用第二个参数,该参数实际上可以使您对新创建的变量有相当好的控制,包括不覆盖任何现有变量(EXTR_SKIP),仅覆盖现有变量(因此您可以创建白名单)(EXTR_IF_EXISTS)或为变量添加前缀(EXTR_PREFIX_ALL)。

2020-05-26