PHP에서 선택적 인수를 어떻게 작성합니까?


190

PHP 매뉴얼에서 선택적 매개 변수가있는 함수의 구문을 표시하기 위해 각 종속 선택적 매개 변수 세트 주위에 대괄호를 사용합니다. 예를 들어, date()기능의 경우 매뉴얼은 다음과 같이 읽습니다.

string date ( string $format [, int $timestamp = time() ] )

$timestamp선택적 매개 변수는 어디에 있으며, 비워두면 기본값은 time()함수의 리턴 값입니다.

PHP에서 커스텀 함수를 정의 할 때 이와 같은 선택적 매개 변수를 만드는 방법은 무엇입니까?

답변:


253

매뉴얼과 마찬가지로 =매개 변수 정의에 등호 ( )를 사용 하십시오.

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)이 더 나은 옵션을 찾았습니다.
Mohammad Zaid Pathan

52

인수의 기본값은 상수 표현식이어야합니다. 변수 또는 함수 호출이 될 수 없습니다.

그러나이 기능이 필요한 경우 :

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

$bar물론 부울이 아니라고 가정 합니다.


1
그러나 0 또는 "false"가 $ bar에 전달되었는지 평가합니다.
Tyzoid

33
Null이 훨씬 더 나은 기본값입니다.
Kzqai

3
@DooMMasteR, 여기, 당신은 의미합니다 $bar === false-이것이 $bar기본값으로 설정 되었을 때 수행되어야하는 행동입니다 false. 0부울이 필요한 경우 가 아니라면 잘못된 조치 가 전달되지 않으므로 작동합니다. Kzqai가 말했듯 $bar = null이 $ bar의 값이 부울 인 경우에도 사용할 수 있기 때문에 보다 일반적인 솔루션을 사용 하는 것이 좋습니다. 시험은 다음이된다 if (is_null($bar))if ($bar === null).
ToolmakerSteve

22

나는 또한 유용하다고 생각한 몇 가지 메모 :

  • 기본값을 오른쪽에 유지하십시오.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • 인수의 기본값은 상수 표현식이어야합니다. 변수 또는 함수 호출이 될 수 없습니다.


14

선택적 인수에 기본값을 지정하십시오.

function date ($format, $timestamp='') {
}

10

날짜 함수는 다음과 같이 정의됩니다.

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

일반적으로 기본값은 다음과 같습니다.

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

그러나 리터럴 만 유효한 기본 인수이므로 null첫 번째 예제에서는 기본 인수로 사용 하지 않고 $timestamp = time() null 검사와 결합했습니다. 리터럴에는 배열 ( array()또는 []), 부울, 숫자, 문자열 및가 포함됩니다 null.


8

처리해야 할 속성 수를 모르는 경우 ...PHP 5.6에 도입 된 가변 인수 목록 토큰 ( )을 사용할 수 있습니다 ( 여기에서 전체 문서 참조 ).

통사론:

function <functionName> ([<type> ]...<$paramName>) {}

예를 들면 다음과 같습니다.

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

보시다시피이 토큰은 기본적으로 모든 매개 변수를 배열로 변환하여 원하는 방식으로 처리 할 수 ​​있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.