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

use*_*306 1 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

extract2($_POST,"username,password,firstname");
echo "Username is $username";
Run Code Online (Sandbox Code Playgroud)

事情做得不好......在一个功能中:

function x($data)
{
   extract2($data,"some,var,names,here");
   //now the variables are are global, so you must:
    global $some,$var,$names,$here;

}
Run Code Online (Sandbox Code Playgroud)

任何想法如何避免全局,而是将var插入本地var范围?

gen*_*nio 5

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

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