我有一个函数,它是一种比 extract() 更安全的提取变量的方法。
基本上,您只需指定要从数组中提取哪些变量名。
问题是,如何像 extract() 那样将这些变量插入“当前符号表”?(即函数内的局部变量范围)。
我现在只能通过使它们成为全局变量来做到这一点:
/**
* Just like extract(), except only pulls out vars
* specified in restrictVars to GLOBAL vars.
* Overwrites by default.
* @param arr (array) - Assoc array of vars to extract
* @param restrictVars (str,array) - comma delim string
* or array of variable names to extract
* @param prefix [optional] - prefix each variable name
* with this string
* @examples:
* extract2($data,'username,pswd,name','d');
* //this will produce global variables:
* // $dusename,$dpswd,$dname
*/
function extract2($arr,$restrictVars=null,$prefix=false)
{
if(is_string($restrictVars))
$restrictVars=explode(",",$restrictVars);
foreach ($restrictVars as $rvar) {
if($prefix) $varname="$prefix$rvar";
else $varname=$rvar;
global ${$varname};
${$varname}=$arr[$rvar];
}
}
用法:
extract2($_POST,"username,password,firstname");
echo "Username is $username";
事情不太顺利的地方......在函数内部:
function x($data)
{
extract2($data,"some,var,names,here");
//now the variables are are global, so you must:
global $some,$var,$names,$here;
}
知道如何避免全局,而是将 var 插入本地 var 范围?