Php 重复使用extract()变量是否需要初始化?

Php 重复使用extract()变量是否需要初始化?,php,extract,Php,Extract,我使用extract()将关联数组名转换为变量。但是我想知道重复调用extract()来重新生成变量是否足够安全,或者应该重新初始化变量 extract($display[0]); // Turn associative array names into variables. echo $foobaz . "\n"; $foobaz = ""; // Is this necessary? extract($display[1]); // Turn associative array name

我使用extract()将关联数组名转换为变量。但是我想知道重复调用extract()来重新生成变量是否足够安全,或者应该重新初始化变量

extract($display[0]); // Turn associative array names into variables.
echo $foobaz . "\n";

$foobaz = ""; // Is this necessary? 
extract($display[1]); // Turn associative array names into variables.
echo $foobaz . "\n";

// Or is this safe to use?
extract($display[0], EXTR_OVERWRITE);

只要每个$display[i]数组都有所有字段,就不需要重新初始化它们。但是,请不惜一切代价避免提取。

什么是安全形式?哦,等等,我撒谎。我认为
extract()
有一个安全的形式。事实证明,这几乎总是危险的。为什么要避免extract()?我有一个数组,其中有十几个变量可供使用。这似乎是一个简单的解决方案。更好的选择是什么?为什么不只是echo$display[1]['foobaz']?我承认我有时会使用extract(),尤其是在查看数据库结果集时。我通常使用:extract($row,3,“db”);这使得每个变量前面都有一个$db_u。例如:$db\u name、$db\u age等。更干净,因为它是数据库行,所以可以保证记录每次都会被覆盖,例如,如果您处于while循环中。您可以做
$db\u field
而不是
$db['field']
,几乎一样短。