2

C のプリプロセッサについてとりとめのない質問をする方法がわかりませんが、試してみます。

PHP で、変数の名前を文字列または値として使用する方法はありますか。

このように関数を呼び出す代わりに、

$somevar = 'whatever';

fun('somevar', $somevar);

次のように呼び出すことができます。

fun(<magic:$somevar>, $somevar);

または、あえて言うなら、このように:

fun($somevar);

fun() 自体が変数の値 ('whatever') と名前 ('somevar') の両方を推測します。(C では、プリプロセッサ #define で実行できます。)

上記の「魔法」はもちろん、私が探している PHP の魔法の構文のプレースホルダーであり、これを行うのに役立ちます。どうにかして eval() で作ることができると思いますか? しかし、人々は私に eval を使わないように言い続けています。

誰かが、内省が何とかうまくいくかもしれないとほのめかしました。どんなリードも大歓迎です。

4

3 に答える 3

2

これを試して

function var_name(&$var, $scope=0)
{
    $old = $var;
    if (($key = array_search($var = 'unique'.rand().'value', !$scope ? $GLOBALS : $scope)) && $var = $old) return $key;  
}
于 2012-09-06T07:22:00.000 に答える
2

http://php.net/manual/en/language.variables.variable.php

おそらく私ができるよりもうまく説明できますが、これはあなたが探しているものだと思いますか?

さて、関数を呼び出す前に、次のことを行います。

$var= "variableName";
$$var = "variableValue";
fun($var);

楽しみのために関数定義内で:

function fun($parameter)
{
    global $$parameter;
    echo $parameter; //echos the variableName
    echo $$parameter; //echos the variableValue
}
于 2012-09-06T07:24:23.887 に答える
1

いいえ。PHP のスコープ ルールにより、それができなくなります。唯一の方法は、(ご存知のように) プリ プロセッサを使用するか、コードをイントロスペクトすることであり、どちらも同じようなものです。PHP には組み込みのトークナイザーがあり、これを使用してファイルを解析できます。debug_backtrace解析するファイルを見つけるために使用できます。とはいえ、それを行うのは非常に面倒で非効率的なことになるので、自分がしていることを再考した方がよいでしょう。

于 2012-09-06T08:07:18.033 に答える