함수 인수를 통해서 함수에 정보를 넘겨줄수 있다. 이런 함수 인수는 콤마(,)로 구별되는 표현 목록이다.
PHP는 값에 의한 인수 전달(passing by value) (기본값), 참조에 의한 전달, 인수 기본값 기능을 지원합니다. 가변 길이 인수 목록도 지원하며, 자세한 정보는 func_num_args(), func_get_arg(), func_get_args() 함수 레퍼런스를 참고하십시오.
Example #1 함수에 배열 넘겨주기
<?php
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
기본적으로, 함수 인수는 값에 의해 전달됩니다. (그래서 함수내의 인수 변수값을 변경해도 함수 밖에서는 바뀌지 않습니다) 함수가 그 인수를 바꾸게 하려면, 참조로 넘겨줘야 합니다.
항상 함수의 인수를 참조로 넘기게 하려면, 함수 정의에서 엠퍼샌드(&)를 인수 이름 앞에 붙이면 됩니다:
Example #2 참조에 의해 함수 인수 전달하기
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // outputs 'This is a string, and something extra.'
?>
함수는 다음과 같이 스칼라 인수에 대해 C++스타일 기본값으로 지정할수있다:
Example #3 함수에 기본 인수 사용하기
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>
위 예제 코드의 출력은 다음과 같다:
PHP는 array와 특별형 NULL을 기본값으로 사용할 수 있습니다. 예를 들면:
Example #4 스칼라 형이 아닌 기본값 사용하기
<?php
function makecoffee($types = array("카푸치노"), $coffeeMaker = NULL)
{
$device = is_null($coffeeMaker) ? "손" : $coffeeMaker;
return "$device(으)로 ".join(", ", $types)."를 만듭니다.\n";
}
echo makecoffee();
echo makecoffee(array("카푸치노", "라바짜"), "찻주전자");
?>
기본값은 상수 표현식이 될수 있으나 (예를 들면) 변수나 클래스 멤버가 될수는 없다.
기본 인수를 사용할때에는 모든 기본값은 기본값을 쓰지 않는 인수의 오른쪽으로 가야 한다; 그렇지 않으면, 기대하던대로 작동하지 않을것이다. 다음 예제 코드를 참고:
Example #5 기본 함수 인수가 잘못 사용된 예
<?php
function makeyogurt($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry"); // won't work as expected
?>
위 예제 코드의 출력은 다음과 같다:
위 코드를 아래 코드와 비교하라:
Example #6 기본 함수 인수의 정확한 사용예
<?php
function makeyogurt($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt("raspberry"); // works as expected
?>
이 예제코드의 출력은 다음과 같다:
Note: PHP 5부터, 기본값을 참조로 넘길 수 있습니다.
PHP 4 이상에서는 사용자 선언 함수에서 가변 길이 변수 목록 기능을 지원합니다. 이 기능은 func_num_args(), func_get_arg(), func_get_args()함수를 사용하여 손쉽게 사용가능하다.
특별한 문법이 필요하지 않다. 인수 목록은 함수선언부에서 밝혀야하고 일반 인수와 동일하게 작동할것이다.