PHP中的方法重载

时间:2012-02-17 16:32:22

标签: php methods overloading

请原谅我的新生儿。在基于ASP.Net的网站上工作时,我记得看到一些方法可以接受不同数量的参数。具体来说,他们会做不同的事情,具体取决于传递给他们的参数数量。

例如:

Email.sendEmail(address,subject,body);

会做一些不同的事情:

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

PHP中的方法是否可以做类似的事情?这叫什么东西?或者我只是完全错误地记错了什么?

4 个答案:

答案 0 :(得分:3)

function sendEmail($address, $bccaddresses, $subject, $body=NULL) {
  if ($body === NULL) {
     $bccaddresses=""; //or whatever default you want
     //shift arguments:
     $subject = $bccaddresses; $body = $subject;
  }
}

答案 1 :(得分: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"=>"test@test.com", "subject"=>"Hi!"));

这使您可以将参数作为命名值传递,并根据需要使用可选值。

答案 2 :(得分:1)

您正在搜索 func_num_args() func_get_args()

另见相关示例,它向您展示了如何完全按照您的需要进行操作。

答案 3 :(得分: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