본문 바로가기

php

php 가변인자

php 가변인자


http://php.net/manual/kr/functions.arguments.php#functions.variable-arg-list


문서를 보면 3가지의 함수가 나온다.

  1. func_num_args()
  2. func_get_arg()
  3. func_get_args()
이들이 포함되어 있는 상위 스코프의 함수 functionArg()라는 함수가 있다고 하자.



각각에 대해 살펴보자.

1. func_num_args() functionArg()함수에 전달된 인자의 개수를 반환하는 함수이다. 따라서 ()안에는 아무것도 넣지 않는다.

-> functionArg(‘a’, ’b’)라면 length 2이므로 func_num_args()는  2 반환한다.



2. func_get_arg() ()안에 지정된 인덱스에 따라 해당 인덱스에 해당하는 functionArg() 넣어 인자의 값을 반환한다. 따라서 func_get_arg() ()안에 원하는 인자의 인덱스 번호를 입력한다.

-> functionArg(‘a’, ’b’)라면 func_get_arg(0) ‘a’, func_get_arg(1) ‘b’ 반환된다. 



3. func_get_args() functionArg()함수에 전달된 인자들을 배열로 반환하는 함수이다. 따라서 ()안에는 아무것도 넣지 않는다.

-> functionArg(‘a’, ’b’)라면 func_get_args() [‘a’, ’b’] 반환한다.



위 방법 뿐만 아니라 매개변수에 function example (...매개변수) { } 형식으로 매개변수 앞에 ...을 붙여 줘서 매개변수[0], 매개변수[1], 매개변수[2]... 형식으로 사용할 수도 있다. 이 경우 함수 호출시 n번째가 없는데 함수 안에서 매개변수[n]으로 호출할 때 에러가 발생하므로 n번째 매개변수가 있는지 없는지 체크하는 과정이 필요하다. '...'을 사용하는 방법을 전개구문이라고 부른다.


주의 : functionArg()이라는 함수를 정의할 때, temp()라는 함수를 그 안에 정의하여 temp() 함수 안에 func_num_args(), func_get_arg(), func_get_args()를 호출할 경우,  functionArg()을 호출할 때 사용한 인자를 대상으로 한 것이 아니라, temp()라는 함수의 인자를 기준으로 판단하게 되므로 주의할 것.