0

重複の可能性:
PHP で変数名を文字列として取得する方法は?

例:

このようなことを PHP で実現できますか?

$Age = 43;

output_variable_name_and_value($Age);

    /*
    outputs:
    "The requested variable name is Age and its current value is 43"; 
    */


//If possible, how would the line marked below with ? ? ? ? be?

function output__variable_name_and_value($input)

{

    $var_name = get_name_somehow($input);   // ? ? ? ? 

    echo "The requested variable name is {$var_name} 
          and its current value is {$input}";

}   
4

3 に答える 3

1

この機能を使用できます:

function var_name(&$iVar, &$aDefinedVars) {
    foreach ($aDefinedVars as $k=>$v)
        $aDefinedVars_0[$k] = $v;

    $iVarSave = $iVar;
    $iVar     =!$iVar;

    $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));
    $iVar      = $iVarSave;

    return $aDiffKeys[0];
}

次のように呼び出します。

var_name($Age, get_defined_vars());

ソース: http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php

于 2012-06-19T12:25:29.370 に答える
1

これは簡単にはできません。$GLOBALS を使用する必要があります。

function get_variable_name($var) {
    foreach($GLOBALS as $k => $v) {
        if ($v === $var) {
            return $k;
        }
    }
    return false;
}

唯一の欠点は、両方が同じ値を持つ場合、異なる変数名を返す可能性があることです。

またはこれ、

function varName( $v ) {
    $trace = debug_backtrace();
    $vLine = file( __FILE__ );
    $fLine = $vLine[ $trace[0]['line'] - 1 ];
    preg_match( "#\\$(\w+)#", $fLine, $match );
    print_r( $match );
}

私はここで見つけました: PHPで変数名を文字列として取得する方法は?

于 2012-06-19T12:25:40.273 に答える
1

良い..

output__variable_name_and_valuedebug_backtrace を使用して、関数の呼び出し元を特定できます。

次に、ファイル名と行番号がわかるので、ソースファイルを解析して、output__variable_name_and_value().

しかし、おそらく悪い考えです!

于 2012-06-19T12:25:47.247 に答える