2010-02-15 3 views
2

null 일 수있는 매개 변수를 가진 함수를 구성하는 가장 좋은 방법은 무엇입니까?PHP 함수 정의, Null 인수

function newDate($day, $overRide, $time = null) { 

     Do something with the variables 

    } 

# newDate('12', 'yes'); 

답변

2

그것은 더 나은 .. 함수 선언의 끝에 default parameters을 정의하는

중앙에 널 (NULL) 또는 기본 매개 변수를 가지고 호출 모양 :

newDate($someDay, null, $override); 

그러나, 마지막에 기본 인수를 갖는 간단한 함수 호출 제공시

newDate($someDay, $override); // null is passed for $time 
+2

스타일의 문제가 아니지만 언어 지원 문제입니다. PHP는 인수 목록의 끝에 선택적 매개 변수 만 지원합니다. – pgb

0

문제는 null이 될 수있는 매개 변수가되지 않습니다 : 예

function newDate($day, $time = null, $overRide) { 

     Do something with the variables 

    } 

# newDate('12', '', 'yes'); 

은 다음과 같이 간단하게 기능을 재구성하는 것입니다. 모든 매개 변수는 함수에 전달하여 null 일 수 있습니다. 이 문제의 원인은 기본값입니다. 기본값을 가진 매개 변수는 컴파일러가 고정 인수의 일부가되기 전에 오는 것으로 가정하는 것이 더 간단하기 때문에 끝에 있어야합니다.

5

나는 실제로 선택의 여지가 없다고 생각합니다.

기본 매개 변수는 함수의 마지막 매개 변수 여야합니다. 그렇지 않으면 newDate(1, 2)으로 전화하면 으로 바뀌어 newDate(1, null, 2)을 원했을 것입니다.

PHP의 documentation on function arguments을 참조하십시오.

1

윤곽을 그리는 것 (즉, 필수 인수 뒤에 선택적 args를 이동하는 것)은 인수의 '흐름'이 여전히 의미가있는 한 의미가 있습니다. (즉, 특정 순서로되어 있어야 감각을 갖출 필요가없는 경우에만 해당). 그러나 여전히 목표를 달성하는 가장 좋은 방법입니다. 잠재적으로 선택적 인수의 수가 많은 경우

말했다, 확인하기 위해 옵션 인수의 키 => 값 쌍을 포함됩니다 옵션 배열을 받아 들일 생각이있을 수 있습니다.)

(덧붙여, 첫 번째 예제에서, 당신은 정말 ''대신 null을 전달해야합니다.)

0

많은 선택적 인수를 가질 수 있습니다 기능에 대한 현재 가장 좋은 방법은, 회답의 지식을 배열을 사용하여 명명 된 인수를 가짜 쓰기.

function foo($options = array()) { 
    $options = array_merge(array(
    'foo' => 'defaultFoo', 
    'bar' => 'defaultBar', 
    'fuz' => false, 
    'buz' => null, 
), $options); 

    if ($options['fuz']) { 
    return $options['foo']; 
    } 

    return $options['foo'] . $options['bar'] . $options['buz']; 
} 

이 기능은 처음 쓰기에는 장황하지만 기능을 사용하고 확장하는 데는 매우 유용합니다. 이 접근법의 효과는 Symfony 1.4 프레임 워크에서의 광범위한 사용과 JQuery가 JavaScript 객체와 비슷한 방식으로 입증되었습니다.

array_merge 및 배열 조회로 인해 약간의 오버 헤드가 있습니다.