PHP Extract2 - 如何在当前符号表中分配变量?

时间:2009-11-09 21:21:12

标签: php extract

我有一个函数,这是一个比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范围?

3 个答案:

答案 0 :(得分:5)

如果这听起来很粗鲁,我很抱歉,但我认为没有必要这样做。

为什么,为什么,你想要这样做?你试图做的是更多的努力,只是比使用数组本身更烦人。

答案 1 :(得分:1)

如何让extract2()返回一个干净的数组并对其结果运行extract()?

extract(extract2())

我不确定,但我认为extract()的功能很神奇,难以复制。

答案 2 :(得分:0)

你应该看一下this comment @ php doc这就是你需要的我认为