개발 꿀팁/PHP

php 변수의 이름을 가져오는 방법

Jammie 2022. 8. 19. 12:07
반응형

PHP에서는 모든 변수가 '심볼 테이블'의 HastTable 구조에 저장되며, 심볼의 작용 영역은 액티브 심볼 테이블과 연관된다.이 때문에 같은 시간에는 하나의 활동표만 있다.

현재 활성 심볼 테이블을 가져오려면 get_defined_vars 방법을 사용하십시오

get_defined_vars // 정의된 모든 변수들의 배열 되돌리기

변수의 값에 따라 변수 이름을 찾되 같은 값의 변수가 있을 수 있으니 주의하시기 바랍니다.

따라서 현재 변수의 값을 임시 변수에 저장한 후 원래 변수에 고유 값을 할당합니다.변수의 이름을 찾아 이름을 찾은 뒤 임시 변수의 값을 원래 변수에 다시 대입할 수 있도록 한다.


예1:

<?php
 
$a = '100';
 
echo '$a name is:'.get_variable_name($a).' value:'.$a; // $a name is: a value: 100
 
/**
* @param String $var   찾을 변수
* @param Array  $scope 검색할 범위
* @param String        변수 이름
*/
function get_variable_name(&$var, $scope=null){
 
	$scope = $scope==null? $GLOBALS : $scope; // 범위가 없다면 Globals에서 찾아봐
 
	// 같은 값의 변수가 있을 수 있으므로, 현재 변수의 값을 임시 변수에 저장한 후, 원 변수에 고유 값을 부여하여 변수의 이름을 찾고, 이름을 찾은 후 임시 변수의 값을 다시 원래 변수에 할당합니다
	$tmp = $var;
	
	$var = 'tmp_value_'.mt_rand();
	$name = array_search($var, $scope, true); // 값을 기준으로 변수 이름 찾기
 
	$var = $tmp;
	return $name;
}
 
?>

예2: function에 정의된 변수 이름 가져오기

<?php
function test(){
	$a = '100';
	echo '$a name is:'.get_variable_name($a);
}
 
test(); // $a name is: undefined
//function에 정의된 변수 globals를 찾을 수 없기 때문에
 
function test2(){
	$a = '100';
	echo '$a name is:'.get_variable_name($a, get_defined_vars());
}
 
test2(); // $a name is: a 
// scope를 get_defined_vars() 로 설정합니다
 
?>

 

반응형