對不起我的新手。在基於ASP.Net的網站上工作時,我記得看到一些方法可以接受不同數量的參數。具體來說,它們會做不同的事情,具體取決於傳遞給它們的參數的數量。PHP中的方法重載
例如:
Email.sendEmail(address,subject,body);
會做一些不同:
Email.sendEmail(address,bccaddresses,subject,body);
是否有可能在PHP方法做同樣的事情?這個東西叫什麼?或者我只是完全誤解了一些東西?
對不起我的新手。在基於ASP.Net的網站上工作時,我記得看到一些方法可以接受不同數量的參數。具體來說,它們會做不同的事情,具體取決於傳遞給它們的參數的數量。PHP中的方法重載
例如:
Email.sendEmail(address,subject,body);
會做一些不同:
Email.sendEmail(address,bccaddresses,subject,body);
是否有可能在PHP方法做同樣的事情?這個東西叫什麼?或者我只是完全誤解了一些東西?
你可以使用關聯數組作爲參數,並利用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!"));
這使您可以將參數作爲命名值傳入,並帶有可選的值,只要您認爲合適。
您正在搜索func_num_args()
和func_get_args()
。
另請參閱相關示例,它會告訴您如何完成您所需的操作。
在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
function sendEmail($address, $bccaddresses, $subject, $body=NULL) {
if ($body === NULL) {
$bccaddresses=""; //or whatever default you want
//shift arguments:
$subject = $bccaddresses; $body = $subject;
}
}
+1這就是我所說的混淆變量名稱:-)工作得很好,但沒有良好的文檔就可能是地獄般的! – cmbuckley 2012-02-17 17:31:37
+1這看起來好像可以工作,但我會和你的建議一起去,cbuckley。 – 2012-02-17 23:12:57
這被稱爲[方法/函數重載](http://en.wikipedia.org/wiki/Function_overloading)。 PHP本身沒有這個,沒有hacky的變通方法,涉及到func_get_args或混淆變量名稱。 Boo :-( – cmbuckley 2012-02-17 16:36:20
@cbuckley PHP似乎有一種更好的重載方式... http://stackoverflow.com/a/9332030/798818 – Mob 2012-02-17 16:37:47
重載!=可選參數。這允許不同的參數,但允許檢查數據類型必須在函數中處理,而不是明確定義多個函數簽名 – cmbuckley 2012-02-17 16:38:34