ホームページ > php教程 > php手册 > PHP で変数の変数名を取得するコードのバグ分析

PHP で変数の変数名を取得するコードのバグ分析

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:07:24
オリジナル
1348 人が閲覧しました

コードをコピー コードは次のとおりです:


/**
* 変数名を取得
*
* @param $string
* @return $string
*
* $test = "helo"
* $test2 = "こんにちは";
* getVarName($test2);
*/
function getVarName(&$src) {
//現在の変数値を保存します
$save = $src;
//すべての変数値を保存します
$allvar = $GLOBALS;
//$GLOBALS を走査しません関数を実行すると、スタックの問題が発生します
foreach($allvar as $k=>$v){
//変数値は同じですが、同じ変数ではない可能性があります。複数の変数の値は同じである可能性があります
if ($src = = $v){
//現在の変数の値を変更します $src
$src = 'change'; //$GLOBALS[$k] も変更される場合、それは同じ変数です。
if ($src == $GLOBALS[$k]){
//echo "$$k の名前は $k
";
//変数の値を復元します
$src = $save;
return $k;
}
}
}
}

テスト結果が正しい場合があることがわかりました。長い間考えた結果、非常に単純ではありますが、同じ状況に遭遇した学生に注目してもらいたいと思って記録しました。
例: ここで、

コードをコピーします コードは次のとおりです:

$test2 = "hello" ;
$countNum=0;
echo getVarName($test2);
// 論理的には "test2" となるはずですが、出力は "countNum"、

関数
if ($src == $v) には $src="hello" などの問題があるため、$GLOBALS には変数 $countNUm=0 があります。この時点では、if ($src == $v)、つまり、"hello"==0 の場合、比較結果は true になります。型変換中、"hello" は整数に変換され、0 になります。
その後、ループが終了し、間違った結果が得られます。
解決策の 1 つは、if ($src == $v) を if ($src===$v) に変更することですが、これは同じです。
私の理解が間違っている場合は、喜んで訂正し、一緒に進歩させてください。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート