2012-02-17 1 views
1

실례합니다. ASP.Net 기반 웹 사이트에서 작업하면서 여러 가지 인수를 허용 할 수있는 몇 가지 방법을 생각해 냈습니다. 특히 매개 변수의 수에 따라 다른 작업을 수행합니다.PHP로 메서드 오버로딩

Email.sendEmail(address,subject,body); 

가 다른 것을 할 것입니다 : 예를 들어

Email.sendEmail(address,bccaddresses,subject,body); 

그것은 PHP의 방법이 비슷한을 할 수 있습니까? 이게 뭐야? 아니면 내가 완전히 잘못 생각한거야?

+1

[메소드/함수 오버로딩] (http://en.wikipedia.org/wiki/Function_overloading)이라고합니다. PHP는 기본적으로 func_get_args 나 혼동스러운 변수 이름을 포함하는 해킹이없는 해결 방법이 없습니다. Boo :-( – cmbuckley

+0

@cbuckley PHP는 과부하의 더 좋은 방법을 가지고있는 것 같습니다 ... http://stackoverflow.com/a/9332030/798818 – Mob

+0

오버로드! = 선택적 매개 변수. 이것은 다른 유형을 허용하지만 데이터 유형을 검사합니다. 함수에서 여러 함수 서명을 명시 적으로 정의하는 대신 처리해야합니다. – cmbuckley

답변

2

당신은 인자로 연관 배열을 사용하고 extract()의 사용을 만들 수 있습니다.

function sendMail($opts){ 
    extract($opts, EXTR_SKIP); // EXTR_SKIP prevents extract from overwriting anything already in the symbol table 
    if(isset($bccaddresses)){ 
     // do something with the bcc addresses 
    } 
    echo "sending some mail to $to with subject $subject"; 
} 

sendMail(array("to"=>"[email protected]", "subject"=>"Hi!")); 

이렇게하면 선택적 값을 사용하여 인수를 인수로 전달할 수 있습니다.

1

PHP에서는 함수의 기본값을 설정합니다.

function myFunc($val1 = 1, $val2 = 2, $val3 = 3){ 
    echo "$val1 $val2 $val3"; 
} 


myFunc();  // outputs 1 2 3 
myFunc(5); // outputs 5 2 3 
myFunc(8, 1); // outputs 8 1 3 
3
function sendEmail($address, $bccaddresses, $subject, $body=NULL) { 
    if ($body === NULL) { 
    $bccaddresses=""; //or whatever default you want 
    //shift arguments: 
    $subject = $bccaddresses; $body = $subject; 
    } 
} 
+0

+1 이것은 내가 혼란스러운 변수 이름을 가리키는 것입니다 :-) 잘 작동하지만 좋은 문서없이 지옥 같을 수 있습니다! – cmbuckley

+0

+1 이것이 효과가있는 것처럼 보이지만 권장 사항 인 cbuckley와 함께 갈 것입니다. –