가변 개수의 인수를 PHP 함수에 전달하는 방법 인수 ( func_num_args()및

가변 개수의 인수 ( func_num_args()및 사용 func_get_args())를 받는 PHP 함수가 있지만 함수를 전달하려는 인수의 수는 배열의 길이에 따라 다릅니다. 가변 개수의 인수로 PHP 함수 를 호출 하는 방법이 있습니까?



답변

배열에 인수가있는 경우 call_user_func_array함수에 관심이있을 수 있습니다 .

전달하려는 인수의 수가 배열의 길이에 따라 달라진다면 아마도 배열 자체로 압축하여의 두 번째 매개 변수에 사용할 수 있음을 의미 할 것입니다 call_user_func_array.

전달한 배열의 요소는 함수에서 고유 한 매개 변수로 수신됩니다.

예를 들어이 기능이있는 경우 :

function test() {
  var_dump(func_num_args());
  var_dump(func_get_args());
}

다음과 같이 매개 변수를 배열로 압축 할 수 있습니다.

$params = array(
  10,
  'glop',
  'test',
);

그런 다음 함수를 호출합니다.

call_user_func_array('test', $params);

이 코드는 다음을 출력합니다.

int 3

array
  0 => int 10
  1 => string 'glop' (length=4)
  2 => string 'test' (length=4)

즉, 3 개의 매개 변수; iof 함수가 다음과 같이 호출 된 것과 똑같습니다.

test(10, 'glop', 'test');

답변

이제 … 연산자 (일부 언어에서는 splat 연산자라고도 함)를 사용하여 PHP 5.6.x 에서 가능합니다 .

예:

function addDateIntervalsToDateTime( DateTime $dt, DateInterval ...$intervals )
{
    foreach ( $intervals as $interval ) {
        $dt->add( $interval );
    }
    return $dt;
}

addDateIntervaslToDateTime( new DateTime, new DateInterval( 'P1D' ),
        new DateInterval( 'P4D' ), new DateInterval( 'P10D' ) );

답변

새로운에서 PHP는 5.6 , 당신이 사용할 수있는 ... operator사용하는 대신 func_get_args().

따라서 이것을 사용하여 전달하는 모든 매개 변수를 얻을 수 있습니다.

function manyVars(...$params) {
   var_dump($params);
}

답변

PHP 5.6 부터는 변수 인자 목록을 ...연산자 로 지정할 수 있습니다 .

function do_something($first, ...$all_the_others)
{
    var_dump($first);
    var_dump($all_the_others);
}

do_something('this goes in first', 2, 3, 4, 5);

#> string(18) "this goes in first"
#>
#> array(4) {
#>   [0]=>
#>   int(2)
#>   [1]=>
#>   int(3)
#>   [2]=>
#>   int(4)
#>   [3]=>
#>   int(5)
#> }

보시다시피 ...연산자는 배열에서 인수의 변수 목록을 수집합니다.

변수 인수를 다른 함수에 전달해야하는 경우 ...에도는 여전히 도움이 될 수 있습니다.

function do_something($first, ...$all_the_others)
{
    do_something_else($first, ...$all_the_others);
    // Which is translated to:
    // do_something_else('this goes in first', 2, 3, 4, 5);
}

PHP 7 부터 , 인자의 변수 목록도 모두 같은 유형이 되도록 강제 할 수 있습니다.

function do_something($first, int ...$all_the_others) { /**/ }

답변

이 작업을 수행하는 방법을 찾는 사람들을 위해 $object->method:

call_user_func_array(array($object, 'method_name'), $array);

변수 매개 변수를 사용하여 변수 method_name을 호출하는 구성 함수에서 성공했습니다.


답변

그냥 부를 수 있습니다.

function test(){
     print_r(func_get_args());
}

test("blah");
test("blah","blah");

산출:

어레이 ([0] => blah) 어레이 ([0] => blah [1] => blah)


답변

여기 아무도 단순히 배열을 전달하고 추출 하는 것에 대해 언급하지 않은 것에 놀랐습니다 . 예 :

function add($arr){
    extract($arr, EXTR_REFS);
    return $one+$two;
}
$one = 1;
$two = 2;
echo add(compact('one', 'two')); // 3

물론 이것은 인수 유효성 검사를 제공하지 않습니다 . 이를 위해 누구나 내 기대 기능을 사용할 수 있습니다 : https://gist.github.com/iautomation/8063fc78e9508ed427d5