Перегрузка методов в PHP - PullRequest
1 голос
/ 17 февраля 2012

Извините, я новичок. Работая над сайтом, основанным на ASP.Net, я помню, как видел некоторые методы, в которых можно было бы принимать разное количество аргументов. В частности, они будут делать разные вещи, в зависимости от количества переданных им параметров.

Например:

Email.sendEmail(address,subject,body);

сделает что-то другое:

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

Возможно ли, чтобы методы в PHP делали что-то подобное? Как называется эта вещь? Или я просто что-то неправильно запомнил?

Ответы [ 4 ]

3 голосов
/ 17 февраля 2012
function sendEmail($address, $bccaddresses, $subject, $body=NULL) {
  if ($body === NULL) {
     $bccaddresses=""; //or whatever default you want
     //shift arguments:
     $subject = $bccaddresses; $body = $subject;
  }
}
2 голосов
/ 17 февраля 2012

Вы можете использовать ассоциативный массив в качестве аргумента и использовать 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!"));

Это позволяет передавать аргументы как именованные значения с необязательными значениями, которые вы считаете нужными.

1 голос
/ 17 февраля 2012

В 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
1 голос
/ 17 февраля 2012

Вы ищете func_num_args() и func_get_args().

См. Также связанные примеры,он показывает вам, как делать именно то, что вам нужно.

...