3

スクリプトで関数を何度も使用しvar_dump()て、変数の実際の値とタイプを確認しています。長い間、関数vardump()witchを以下に定義するだけで十分でした。

function vardump($_var){
    echo '<pre>';
    var_dump($_var);
    echo '</pre>';
}

しかし、今日私はそれを何度も何度も使用しているので、私が本当にチェックしているホイッチ変数を混乱させています。だから問題は、私が現在チェックしている値の名前をどのように決定するかです。

4

5 に答える 5

3

すべての朝の検索の後、私はこの解決策を見つけました:

/**
 * Functions that will display name of the variable, and it's value, and type
 * 
 * @param type $_var - variable to check
 * @param type $aDefinedVars - Always define it this way: get_defined_vars()
 * @return type
 */
function vardump(&$_var, &$aDefinedVars = null){
    if($aDefinedVars){
         foreach ($aDefinedVars as $k=>$v)
            $aDefinedVars_0[$k] = $v; 
        $iVarSave = $_var; // now I copy the $_var value to ano
        $_var     = md5(time());

        $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));
        $_var      = $iVarSave;
        $name      = $aDiffKeys[0];
    }else{
        $name = 'variable';
    }

    echo '<pre>';
    echo $name . ': ';
    var_dump($_var);
    echo '</pre>';
}

変数名を取得するには、次のvardump()ように使用する必要があります。

vardump($variable_name, get_defined_vars());

get_defined_vars() この関数は、get_defined_vars() が呼び出されたスコープ内で、環境変数、サーバー定義変数、ユーザー定義変数など、すべての定義済み変数のリストを含む多次元配列を返します。

コードについてさらに説明を加えます。コードにはいくつかのエキゾチックな関数が使用されています。

/**
 * Functions that will display name of the variable, and it's value, and type
 * 
 * @param type $_var - variable to check
 * @param type $aDefinedVars - Always define it this way: get_defined_vars()
 * @return type
 */
function vardump(&$_var, &$aDefinedVars = null){
    // $aDefinedVars - is array of all defined variables - thanks to get_defined_vars() function
    if($aDefinedVars){
        // loop below is used to make a copy of the table of all defined variables
        foreach ($aDefinedVars as $k=>$v)
            $aDefinedVars_0[$k] = $v; // this is done like that to remove all references to the variables
        $iVarSave = $_var; // now I copy the $_var value to another variable to prevent loosing it
        $_var     = md5(time()); // completly random value
        // and the most tricky line
        $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));

$_var値の配列$aDefinedVars_0を変更したため、値$aDefinedVarsのみを除いて同一です(変数への参照を使用しないことに$_var注意してください。変更には影響しませんでした)。$aDefinedVars_0$_var$aDefinedVars_0

これで、array_diff_assoc関数は (元の$aDefinedVars_0値で) と$aDefinedVars(変更された$_var値で) を比較し、連想配列 (位置$_varの名前と$_var値を 1 つだけ含む配列) との差を返します。

このarray_keys関数は、入力配列から数値と文字列のキーを返します (入力配列には、探している位置が 1 つだけ含まれています)。

        $_var      = $iVarSave; // now I can restore old $_var value
        $name      = $aDiffKeys[0]; // name of the $_var is on the first (and the only position) in the $aDiffKeys array
    }else{ // is someone won't use get_defined_vars()
        $name = 'variable';
    }

    echo '<pre>';
    echo $name . ': ';
    var_dump($_var); // it can be changed by print_r($_var);
    echo '</pre>';
}

PS。私の英語でごめんなさい。

于 2013-01-22T09:00:26.230 に答える
2

私はあなたの問題または同様のものを解決するためにインターネット中に多くの奇妙なスクリプトを見ます...

ちなみに、それを行う最良の方法は、変数の名前を、必要に応じて短縮して、文字列パラメーターとして渡すことだと思います。

function vardump($_var, $var_name){
echo '<pre> Variable <b>$var_name</b>: ';
var_dump($_var);
echo '</pre>';
}

それほど速くはありませんが、良い解決策です。

于 2013-01-22T09:16:54.087 に答える
1

への引数vardumpは変数ではなく式である可能性があるため、これは取得できる最も近いものです。

function vardump($_var, $_label){
    echo '<pre>';
    if(!empty($_label)){
      echo $_label . ': ';
    }
    var_dump($_var);
    echo '</pre>';
}
于 2013-01-22T09:00:58.957 に答える
1

そうですね、dump_r という php クラスをお勧めしたいと思います。このクラスは情報を異なる色で表示するもので、var_vump と print_r を組み合わせたものです。phpclasses.org で見つけることができます。

ここにリンクがあります

于 2013-01-22T09:09:18.557 に答える
0

変数名を文字列として取得することはできません。PHP で変数名を文字列として取得する方法で説明されている方法を使用できますか? しかし、前述のように、それは完璧ではありません。

あなたの最善の策は、それを自分で追加するか、グローバルを使用して変数名を文字列として渡すことだと思います

function vardump($_var){
    echo '<pre>';
    var_dump($GLOBALS[$_var]);
    echo '</pre>';
}

vardump("foo");
于 2013-01-22T09:00:57.987 に答える