我有一个函数,这是一个比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范围?
答案 0 :(得分:5)
如果这听起来很粗鲁,我很抱歉,但我认为没有必要这样做。
为什么,为什么,你想要这样做?你试图做的是更多的努力,只是比使用数组本身更烦人。
答案 1 :(得分:1)
如何让extract2()返回一个干净的数组并对其结果运行extract()?
extract(extract2())
我不确定,但我认为extract()的功能很神奇,难以复制。
答案 2 :(得分:0)
你应该看一下this comment @ php doc这就是你需要的我认为