background image

 
不要对不能信任的数据使用

 extract(),例如用户的输入(

$_GET

…)。如果这样做,举例

说,要临时运行依赖于

 register_globals 的老代码,要确保使用不会覆盖的 extract_type 值,

例如

 EXTR_SKIP,并且要留意应该按照 php.ini 中由 variables_order 定义的顺序来提取。 

 
extract() 的一种可能用法是将 wddx_deserialize() 返回的结合数组中的内容导入到符号表变
量中去。

 

 
Example#1 extract() 例子 
代码如下

:

 
<?php 

/* 假定 $var_array 是 wddx_deserialize 返回的数组*/

 

$size

 = “large”; 

$var_array

 = 

array

(”color” => “blue”, 

“size” => “medium”, 
“shape” => “sphere”); 
extract(

$var_array

, EXTR_PREFIX_SAME, “wddx”); 

echo

 “

$color

$size

$shape

$wddx_size

\n”; 

?> 
 
上例将输出:

 

 
blue, large, sphere, medium 
 

$size

 没有被覆盖,因为指定了 EXTR_PREFIX_SAME,这使得 

$wddx_size

 被建立。如果指

定了

 EXTR_SKIP,则 

$wddx_size

 也不会被建立。EXTR_OVERWRITE 将使 

$size

 的值为

“medium”,EXTR_PREFIX_ALL 将建立新变量 

$wddx_color

$wddx_size

 和 

$wddx_shape

 

 
必须使用关联数组,数字索引的数组将不会产生结果,除非用了

 EXTR_PREFIX_ALL 或者

 

EXTR_PREFIX_INVALID。