PHP에서 변수 이름을 문자열 형태로 가져오고 싶다면 가변 변수(Variable Variables) 또는 $GLOBALS 배열을 활용할 수 있습니다. 아래 예제를 통해 두 가지 방법을 자세히 살펴보겠습니다.
예제 1: 가변 변수($$) 사용하기
PHP의 가변 변수 문법인 이중 달러 기호($$)를 사용하면 문자열 값을 변수 이름처럼 다룰 수 있습니다.
<?php $a = "This is it!"; $$a = "Demo string!"; print($a); ?>
출력 결과
This is it!
위 코드에서 $$a는 변수 $a에 저장된 값("This is it!")을 이름으로 하는 새로운 변수를 생성합니다. 즉, ${"This is it!"}라는 변수가 만들어지는 것입니다. 하지만 print($a)는 여전히 원래 변수 $a의 값을 출력하므로 결과는 "This is it!"이 됩니다.
예제 2: $GLOBALS 배열로 변수 이름 찾기
변수에 담긴 값을 기준으로 해당 변수의 실제 이름을 알아내려면 PHP의 슈퍼 글로벌 배열인 $GLOBALS를 활용하는 함수를 직접 작성할 수 있습니다.
<?php
$val = "This is it!";
function display($var) {
foreach($GLOBALS as $demo => $value) {
if ($value === $var) {
return $demo;
}
}
return false;
}
print display($val);
?>출력 결과
val
이 코드의 동작 원리는 다음과 같습니다.
$GLOBALS배열에는 현재 스크립트 전역 범위에 정의된 모든 변수가 "변수 이름 => 값" 형태로 저장되어 있습니다.display()함수는 인자로 받은 값과 동일한 값을 가진 변수를$GLOBALS에서 순회하며 찾습니다.- 일치하는 변수를 발견하면 해당 변수의 이름(배열 키)을 반환하고, 찾지 못하면
false를 반환합니다.
따라서 $val에 저장된 값과 일치하는 전역 변수의 이름인 "val"이 출력됩니다.
주의 사항
$GLOBALS를 이용한 방식은 값이 중복되는 변수가 여러 개 있을 경우 첫 번째로 발견된 변수 이름만 반환한다는 점에 유의해야 합니다. 또한 성능상으로도 전역 변수를 모두 순회하기 때문에 대규모 애플리케이션에서는 신중하게 사용하는 것이 좋습니다.