2012-04-20 12 views
2

機能の名前付けに問題があります。クラスがあり、以下のような2つの関数が必要です。PHPクラス関数の名前付け

class myclass { 
    public function tempclass() { 
     echo "default"; 
    } 
    public function tempclass ($text) { 
     echo $text; 
    } 
} 

私は

tempclass('testing'); // (called after creating the object) 

function tempclass()呼び出して、私は同じ名前で異なるパラメータで2つの機能を持つことができますどのように呼ばれていますか?

+0

あなたのコードの書式の代わりに、コードの引用の書式を使用しないのはなぜ? – ThiefMaster

+0

@ThiefMasterが悪いです。 –

答えて

5

現在、PHPでは従来のオーバーロードは使用できません。代わりに、渡された引数をチェックし、どのように応答したいかを判断する必要があります。

この時点でfunc_num_argsfunc_get_argsを確認してください。これらの両方を内部的に使用して、特定のメソッドの呼び出しにどのように応答すべきかを判断できます。

public function tempclass() { 
    switch (func_num_args()) { 
    case 0: 
     /* Do something */ 
     break; 
    case 1: 
     /* Do something else */ 
    } 
} 

また、あなたが同様にあなたの引数のデフォルト値を提供し、あなたが反応するべきかを決定するために、これらを使用することができます:

public function tempclass ($text = false) { 
    if ($text) { 
    /* This method was provided with text */ 
    } else { 
    /* This method was not invoked with text */ 
    } 
} 
+1

+1ですが、答えを編集して 'func_get_args()'と 'func_num_args()'への参照リンクを含めることをお勧めします。 :-) – FtDRbwLXw6

+0

すごく感謝します。 –

0
例えば、あなたのケースでは、次の操作を行うことができ

PHPではオーバーロードできません。

しかし、上記のあなたの簡単な例のために、このような何かが働くだろう:

class myclass { 
    public function tempclass ($text='Default') { 
     echo $text; 
    } 
} 
+0

あなたが同意すると思う変更を加えました。 –

+0

完全に!それも考えていませんでした=) – Nick

+0

あなたのオンラインコンタクトフォームは動作しません。あなたはスコットランドに住んでいます。私もそうです。私の連絡先の詳細はこのサイトでご覧になれます。 –

関連する問題