PHP - 참조 호출

안녕하세요, 도전하는 프로그래머 여러분! 오늘은 PHP에서 흥미로운 주제로 '참조 호출'에 대해 다룹니다. 프로그래밍에 새로운 분이라면 걱정하지 마세요; 저는 여러분을 단계별로 안내해 드릴 것입니다. 많은 학생들을 가르치면서 쌓아온 경험을 바탕으로 말이죠. 이제 함께 코딩의 모험을 떠나보겠습니다!

PHP - Call by Reference

참조 호출이란?

먼저 '참조 호출'이 무엇인지 이해해 보겠습니다. PHP에서 변수를 함수로 전달할 때, 일반적으로 그 값이 전달됩니다. 이를 '값 호출'이라고 합니다. 하지만 때로는 변수 자체를 전달하고 싶을 때가 있습니다. 이때 '참조 호출'이 유용하게 사용됩니다.

상자( 변수)에 장난감( 값)이 들어있는 상상해 봅시다. 상자를 값으로 전달할 때, 다른 사람한테 장난감의 사본을 주는 것입니다. 하지만 참조로 전달할 때, 실제 상자 자체를 주는 것입니다. 그들은 상자와 그 내용을 변경할 수 있습니다.

예제

이 개념을 이해하기 위해 간단한 예제를 시작해 보겠습니다:

<?php
function addFive($num) {
$num += 5;
}

$myNumber = 10;
addFive($myNumber);
echo $myNumber; // 출력: 10
?>

이 예제에서는 $myNumber를 값으로 전달하고 있습니다. addFive() 함수는 매개변수에 5를 더하지만, 원래 $myNumber 변수에는 영향을 미치지 않습니다. 출력은 여전히 10입니다.

이제 참조 호출을 사용하여 변경해 보겠습니다:

<?php
function addFive(&$num) {
$num += 5;
}

$myNumber = 10;
addFive($myNumber);
echo $myNumber; // 출력: 15
?>

매개변수 $num 앞에 &가 추가되었습니다. 이는 PHP에 참조 전달을 알립니다. 이제 addFive($myNumber)를 호출할 때 원래 $myNumber를 변경하고, 출력은 15가 됩니다.

PHP 함수를 참조로 호출하기

함수를 참조로 호출하려면 두 가지를 해야 합니다:

  1. 함수 매개변수 앞에 &를 추가합니다.
  2. 함수 호출 시 변수( 값이 아님)를 전달합니다.

다른 예제를 보겠습니다:

<?php
function double(&$value) {
$value *= 2;
}

$number = 5;
double($number);
echo $number; // 출력: 10

$string = "Hello";
double($string);
echo $string; // 출력: HelloHello
?>

이 예제에서 double() 함수는 숫자와 문자열 모두에 작동하며, 원래 변수를 변경합니다.

두 변수 교환

참조 호출의 일반적인 사용 사례 중 하나는 두 변수의 값을 교환하는 것입니다. 어떻게 하는지 보겠습니다:

<?php
function swap(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
}

$x = "lemonade";
$y = "iced tea";

echo "교환 전: x = $x, y = $y\n";
swap($x, $y);
echo "교환 후: x = $x, y = $y\n";
?>

출력:

교환 전: x = lemonade, y = iced tea
교환 후: x = iced tea, y = lemonade

이 swap 함수는 마술사의 트릭처럼 두 변수의 값을 서로 교환합니다! 참조 호출 없이는 여러 가지 값을 반환하거나 전역 변수를 사용해야 하며, 이는 복잡해질 수 있습니다.

참조로 반환하기

PHP는 함수가 참조를 반환할 수도 있습니다. 이는 덜 일반적이지만 특정 상황에서 유용할 수 있습니다. 예제를 보겠습니다:

<?php
function &getLargestNumber(&$numbers) {
$largest = &$numbers[0];
foreach ($numbers as &$number) {
if ($number > $largest) {
$largest = &$number;
}
}
return $largest;
}

$myNumbers = [5, 8, 3, 12, 7];
$largestNumber = &getLargestNumber($myNumbers);
$largestNumber = 100;

print_r($myNumbers);
?>

출력:

Array
(
[0] => 5
[1] => 100
[2] => 3
[3] => 12
[4] => 7
)

이 예제에서 getLargestNumber()는 배열 내 가장 큰 값을 참조로 반환합니다. $largestNumber를 변경할 때 원래 배열의 값을 변경합니다.

방법 표

이야기한 방법을 요약한 표입니다:

방법 문법 설명
참조 전달 function myFunc(&$param) 함수가 원래 변수를 변경할 수 있게 합니다
참조 반환 function &myFunc() 값 대신 참조를 반환합니다
변수 교환 swap(&$a, &$b) 두 변수의 값을 서로 교환합니다

결론

PHP의 참조 호출은 다른 사람한테 집의 열쇠를 주는 것처럼, 그 집의 내용을 변경할 수 있는 힘을 주는 것입니다. 강력하지만 신중하게 사용해야 합니다. 강력한 힘은 큰 책임을 동반합니다!

PHP의 여정을 계속하면서 더 많은 흥미로운 개념을 만나게 될 것입니다. 계속 코딩하고, 배우고, 가장 중요한 것은 즐기세요! 누가 알겠는가, 어有一天 perhaps you'll be the one teaching others about the magic of programming.

Credits: Image by storyset