ホームページ >バックエンド開発 >PHPチュートリアル >PHP は変数コードの変数名を取得します bug_PHP チュートリアル
BaiduがPHPで変数名を取得する方法は以下の関数です。しかし、使用後にいくつかのバグを発見しました
/**
* 変数名を取得します
*
* @param $string
*
* $test = "helo"
* $test2 = "helo"
;*/
function getVarName(&$src){
//現在の変数値を保存
$save = $src;
//すべての変数値を保存
$allvar = $GLOBALS; //関数内で$GLOBALSを直接走査しないでください、スタックの問題が発生します
foreach($allvar as $k=>$v){
//変数の値は同じですが、同じではない可能性があります変数。複数の変数の値が同じである可能性があるためです
if ($src == $v){
//現在の変数の値を変更します $src
$src = 'change'
//If $ GLOBALS[$k] も変化しますが、これは同じ変数です。
if ($src == $GLOBALS[$k]){
//echo "$$k の名前は $k です"
//変数の値を復元します
$src = $save
}
}
}
}
コピーしてみて、テスト結果は正しい場合もあれば間違っている場合もあることに気づき、非常に簡単ではありますが、記録しました。同じ状況に遭遇した学生には注意してほしいと思います。
例: ここでテストします
$test2 = "hello";
echo getVarName($test2);
//論理的には出力は "countNum" になります。 ,
$src="hello"など関数内の
if ($src == $v)に問題があるため、$GLOBALSに変数$countNUm=0があり
このときループする際に, ($src == $v)、つまり "hello"==0 の場合、比較結果が true であるかどうかを判断します。型変換の際、"hello" は整数に変換され 0 になります。
その後ループを終了します。そして間違った結果が得られます。
1 つの解決策は、if ($src == $v) を if ($src===$v) に変更することですが、これは同じです。
私の理解が間違っている場合は、修正していただいて、一緒に進歩していきましょう。
http://www.bkjia.com/PHPjc/363934.html
本当