
매개변수는 함수가 작업을 수행하는 데 필요한 값을 나타내는 변수명과 같다. 매개변수가 나타내는 값은 그 함수가 호출될 때마다 바뀔 수 있다.
function calculate_cost($price, $quantity) { return $price * $quantity; }이 함수에서 $price와 $quantity는 매개변수이다. 매개변수는 변수처럼 동작하지만, 함수의 중괄호 안의 구문에서만 사용할 수 있다. 함수 정의 밖에 있는 코드는 이 매개변수에 접근할 수 없다.
PHP 인터프리터는 닫는 중괄호에 도달하면 함수에 저장된 모든 값을 잊는다. 이것은 페이지가 함수를 호출할 때마다 다른 값을 사용하여 호출할 수 있기 때문에 중요하다.
매개변수가 있는 함수를 호출할 때, 각 매개변숫값은 함수명 다음에 있는 괄호 안에 지정된다. 함수를 호출할 때 사용되는 값을 인수라고 한다.
- 값으로서의 인수
$total = calculate_cost(3, 5)
- 변수로서의 인수
$cost = 4; $units = 6; $total = calculate_cost($cost, $units)변수명을 인수로 사용할 경우, 변수명이 매개변수 이름과 일치할 필요는 없다.
매개변수와 인수는 혼용되어 사용되지만, 둘간에 차이가 있다. 위의 예시처럼 $price와 $quantity라는 단어들은 함수의 중괄호 안에서 변수처럼 동작했다. 이것이 매개변수(parameter)이다.
또한 함수를 호출할 때, 코드는 계산을 수행하는 데 사용할 값이나 숫자를 담고 있는 변수를 지정하고 있다. 코드로 전달되는 이 값을 인수(argument)라고 한다.
특별한 경우, 함수 내의 코드가 전역 변수에 접근하거나 업데이트할 수 있도록 하여 그 함수 실행이 끝난 후에 함수 내의 변수에 저장되었던 값을 기억하도록 할 수 있다.
global 키워드를 이용하면 함수 내의 코드가 이 변숫값에 접근하거나 업데이트할 수 있게 한다.
global $cost;
함수의 실행이 완료되면 일반적으로 함수 내에서 생성된 모든 로컬 변수는 삭제된다. PHP 인터프리터는 함수 내에서 생성된 변수가 정적 변수로 생성되었다면 그 변수에 저장된 값을 기억하라고 지시할 수 있다.
static $quantity = 10;
함수의 실행이 끝나도 이 변수와 변수에 저장된 값은 삭제되지 않을 것이다. 그러나 함수 내부에서 생성했기 때문에 함수 내부의 코드에서만 사용할 수 있다.
예시
<?php $tax_rate = 0.2; function calculate_running_total($price, $quantity) { global $tax_rate; static $running_total = 0; $total = $price * $quantity; $tax = $total * $tax_rate; $running_total = $running_total + $total + $tax; return $running_total; } ?> <!DOCTYPE html> <html> <head> <title>Functions with Parameters</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <h1>The Candy Store</h1> <table> <tr> <th>Item</th> <th>Price</th> <th>Qty</th> <th>Running total</th> </tr> <tr> <td>Mints:</td> <td>$2</td> <td>5</td> <td>$<?= calculate_running_total(2, 5); ?></td> </tr> <tr> <td>Toffee:</td> <td>$3</td> <td>5</td> <td>$<?= calculate_running_total(3, 5); ?></td> </tr> <tr> <td>Fudge:</td> <td>$5</td> <td>4</td> <td>$<?= calculate_running_total(5, 4); ?></td> </tr> </table> </body> </html>
결과

출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022