> 백엔드 개발 > PHP 튜토리얼 > 변수 이름 PHP에서 변수의 변수 이름을 얻기 위한 코드 조각의 버그 분석

변수 이름 PHP에서 변수의 변수 이름을 얻기 위한 코드 조각의 버그 분석

WBOY
풀어 주다: 2016-07-29 08:46:00
원래의
945명이 탐색했습니다.

코드 복사 코드는 다음과 같습니다.


/**
* 변수 이름 가져오기
*
* @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이 됩니다.
그런 다음 루프가 종료되고 잘못된 결과가 나옵니다.
한 가지 해결책은 if ($src == $v)를 if ($src===$v)로 변경하는 것입니다. 이는 동일합니다.
내가 잘못 이해한 경우 언제든지 지적해 주시고 함께 발전해 나가도록 해주세요.
위 내용은 변수 이름을 포함하여 PHP에서 변수의 변수 이름을 얻기 위한 코드 조각의 버그 분석을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿