php 가변인자
http://php.net/manual/kr/functions.arguments.php#functions.variable-arg-list
위 문서를 보면 3가지의 함수가 나온다.
- func_num_args()
- func_get_arg()
- func_get_args()
각각에 대해 살펴보자.
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()라는 함수의 인자를 기준으로 판단하게 되므로 주의할 것.