2012-02-17 4 views
1

私の新生児は間違っています。 ASP.NetベースのWebサイトで作業しているうちに、異なる数の引数を受け入れることができるいくつかの方法を見てきました。具体的には、渡されるパラメータの数に応じて、さまざまな処理を行います。例えばメソッドのオーバーロードが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

あなたはfunc_num_args()func_get_args()を探しています。

関連する例も参照してください。これは、必要なものを正確に行う方法を示しています。

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と一緒に行くつもりです。 –

関連する問題