2013-01-05 2 views
1

파이썬에서는 여러 변수가 모두 기본값을 갖는 함수를 가질 수 있습니다. 그런 다음 값 중 하나의 값을 전달합니다. 나는 그런기본 함수 PHP와 Python의 변수

function foo(a=10,b=50, c=70) 
    pass 
    pass 
    return 

이있는 경우 그래서 나는

foo(b=29) 

를 호출 할 수 있으며

foo(10,29,70) 

(모든 값에 대한 기본값을 사용하여, 그 하나에 대한 정확한 값을 부를 것이다 변하기 쉬운).

PHP에서 비슷한 기능이 있습니까?

답변

1

아니요 PHP에는 해당하는 내용이 없습니다. 당신은 함수 인수에 대한 기본 값을 가질 수 있지만 왼쪽에서 오른쪽으로 평가됩니다 명명되지 않은 : 두 변수는 선택이 예에서

function test($var1 = 'default1', $var2 = 'default2') 
{ 

} 

,하지만 당신은 지정하려면 첫 번째 인수를 지정해야합니다 두번째.

function test($options) 
{ 

} 

이것은 하나의 연관 배열의 형태로 가변 인자를 가질 수 있습니다

test(); // works 
test('arg1'); // works 
test('arg1', 'arg2'); // works 
test('arg2'); // this will set the first argument, not the second. 

당신이 당신의 선택적 인수에 유연성을 필요로하는 경우 일반적인 해결 방법은 인수로 배열을 전달하는 것입니다 :

$options = array('var1' => 'arg1', 'var2' => 'arg2'); 
test($options); 
+0

감사합니다. 나는 그렇게 생각했지만 정말로 확신하지 못했습니다. –

1

배열을 인수로 사용하십시오. 예 :

function a(array $params) { 
    $defaults = array(
     'a' => 10, 
     'b' => 50, 
     'c' => 70, 
    ); 
    $params += $defaults; 
    // use $params 
} 

a(array('b' => 29)); 
+0

와우! 코드에서는 지금 당장 과장이 될 것입니다. 하지만 정말 흥미로운 해결책입니다. –

+1

많은 인수가 있고 그 중 많은 수가 필요하지 않은 경우 일반적으로 일부 구조의 인수를 하나만 전달하는 것이 좋습니다. 배열은 간단한 솔루션이므로 (예에서와 같이) 인수를 나타내는 클래스를 만드는 것이 좋습니다. 예를 들어'function search (Filter $ filter)'와'Filter' 클래스는 매개 변수 자체를 보유합니다. 이것은 더 큰 가독성을 제공하지만 (8 번째 인자 등을 계산할 필요가 없기 때문에) 때로는 과장이 될 수 있습니다. –