2016-09-29 9 views
1

다음 함수에는 기본값이있는 인수가 있습니다. 어떻게 그 함수를 값에 할당하여 호출 할 수 있습니까?PHP 일부 기본 함수 인수에 값을 할당하는 방법

function foo($a, $b='def b', $c='def c', $d='def d'){ 
    //.... 
} 
//call foo for $a='nu a' and $c='nu c' 
foo('nu a', $c='nu c'); //but b will be assigned 

나는 $c에 대한 값을 설정하고 단지 $c 그들 모두를 지정하지 않으합니다.

  1. 허용되지 않는 솔루션 :

    foo('nu a', 'def b', 'nu c');

  2. 허용되지 않는 솔루션

    //moving c to second argument function foo($a, $c='def c', $b='def b', $d='def d'){ }

그래서 인수 일부 기본 인수 후에 내가 싶지 않아 previou에 대한 기본값 설정 1에 대한 논쟁

+0

가능한 모든 기본값을 함수 인수 오른쪽으로 이동할 수 있습니까? – atoms

+3

[선택적 매개 변수가있는 PHP 함수]의 가능한 복제본 (http://stackoverflow.com/questions/3978929/php-function-with-optional-parameters) –

답변

0

불가능합니다. PHP에서 지원하지 않는 명명 된 매개 변수를 찾고 있습니다.

이렇게하려면 매개 변수를 단일 배열로 변경하고 함수 본문에서 키를 기반으로 필요한 것을 추출해야합니다.

그 외의 경우에는 b를 전달하지 않고 변수 c의 값을 전달할 수 없습니다.

0

false, '' 또는 null과 같은 기본값을 지정하는 것 이외의 다른 방법으로 건너 뛰는 방법은 없습니다.

이 같은 것을 사용합니다 :

function foo($settings) { 
    $a = $settings['a']; 
    $b = $settings['b']; 
    $c = $settings['c']; 
    $d = $settings['d']; 
    # code... 
} 

foo($settings = array(
    'a' => null, 
    'b' => 'def b', 
    'c' => 'def c', 
    'd' => 'def d', 
)); 

또는 인덱스 배열에서,이 같은 배열 값을 처리하기 위해 list() 구조를 사용할 수있어 다음에

function foo($settings) { 
    list($a, $b, $c, $d) = $settings; 
    # code... 
} 

foo(array(null, 'def b', 'def c', 'def d')); 

적어도 대부분의 경우 함수 정의에서 인수 목록의 끝까지 예상되지 않는 것으로 생각하는 것을 옮길 수 있습니다.

function foo($a, $b = 'def b', $c = 'def c', $d = 'def b') { 
    # code... 
} 
foo($a = 'def a');