最近,我在一些最差的PHP实践中阅读了此线程。在第二个答案中,有一个关于的使用的简短讨论extract(),我只是想知道所有有关的内容。
extract()
我个人使用它来切分给定的数组,例如$_GET或$_POST稍后在其中清理变量,因为它们已为我方便地命名。
$_GET
$_POST
这是不好的做法吗?这有什么风险?您对的使用extract()有何看法?
我发现这只是一种不好的做法,因为它会导致许多变数,将来的维护者(或您自己在几周内)都不知道它们的来源。考虑这种情况:
extract($someArray); // could be $_POST or anything /* snip a dozen or more lines */ echo $someVariable;
哪里$someVariable来的?谁能告诉?
$someVariable
我看不出在从阵列中访问这些变量,他们开始在这个问题,那么你真的需要展示一个良好的情况下, 对 使用extract()我认为这是值得的。如果您真的很担心要输入一些额外的字符,请执行以下操作:
$a = $someLongNameOfTheVariableArrayIDidntWantToType; $a['myVariable'];
我认为这里有关安全性的评论有些夸张。该函数可以使用第二个参数,该参数实际上可以使您对新创建的变量有相当好的控制,包括不覆盖任何现有变量(EXTR_SKIP),仅覆盖现有变量(因此您可以创建白名单)(EXTR_IF_EXISTS)或为变量添加前缀(EXTR_PREFIX_ALL)。
EXTR_SKIP
EXTR_IF_EXISTS
EXTR_PREFIX_ALL