擅长:python、mysql、java
<p>值得指出的是,<code>extract()</code>(在较小程度上,<code>compact()</code>)是PHP最“邪恶”的特性之一(以及<code>register_globals</code>和<code>eval</code>),应该避免吗?</p>
<p><a href="http://php.net/manual/en/function.extract.php" rel="nofollow noreferrer">^{<cd5>}</a>使得确定变量的定义变得更加困难。当一个变量很难追溯到它被定义的地方时,就很难检查常见的安全问题,比如使用未初始化的变量,或者来自用户输入的未筛选的变量。</p>
<p><a href="http://php.net/manual/en/function.compact.php" rel="nofollow noreferrer">^{<cd6>}</a>并没有那么糟糕,但是如果使用不当,仍然会使查看从变量中设置数组成员的位置变得更加困难。</p>
<p>在许多其他语言中,与<code>extract()</code>等价的是<code>with</code>关键字。Python现在有一个<code>with</code>关键字,尽管它的工作方式有点不同,这使得它不像<code>extract()</code>。但是,在其他语言(如Javascript)中,<code>with</code>关键字<a href="http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/" rel="nofollow noreferrer">also has a poor reputation</a>。</p>
<p>我认为最好的建议是用不同的方式思考——不要试图模仿PHP的一个糟糕特性,而要想用简洁易读的代码来做你想做的事情。</p>