PHP Extract2 - yürürlükte olan simge tablosuna değişkenler atamak nasıl?

3 Cevap php

Ben özü daha () değişkenleri ayıklamak için daha güvenli bir yoldur bir işlevi var.

Temelde sadece değişken isimleri bir dizi çekilebilir hangi belirtin.

The problem is, how do you insert those variables into the "current symbol table" ekstresi gibi () nedir? (Bir işlev içinde yerel değişken kapsamını yani).

Ben sadece onlara şimdi küresel değişkenleri yaparak bunu yapabilirsiniz:

/**
 * 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];
    }
}

Usage:

extract2($_POST,"username,password,firstname");
echo "Username is $username";

Where things dont work too well... inside a function:

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

}

Any idea how to avoid the global, but instead insert the var into the local var scope?

3 Cevap

Nasıl onun sonucu ()) (temiz bir dizi dönmek ve özü çalıştırmak extract2 sahip hakkında?

extract(extract2())

Ben emin bilmiyorum, ama özü () işlevselliğini büyü ve çoğaltmak için zor olduğunu düşünüyorum.

Bu kaba sesler eğer üzgünüm, ama ben sadece bunun için gerek görmüyorum.

Neden, neden oh, want bunu yapmak istiyorsunuz? Ne yapmak için çalışıyorsanız daha fazla çaba ve dizi kendisini kullanmak daha sadece basit daha can sıkıcı bir durum.

Eğer this comment @ php doc Bu bence gerek ne bir göz atmalısınız