2

重複の可能性:
php 関数のオーバーロード

次のような関数を再宣言したい:

class Name{
    function a(){ something; }
    function a($param1){ something; }
}

しかし、それは戻ります

Fatal error: Cannot redeclare Name::a()

Javaではうまくいきます。PHPでこれを行うにはどうすればよいですか?

4

4 に答える 4

6

デフォルトのパラメーターを使用します。

class Name{
    function a($param1=null){ something; }
}

パラメータが渡されない場合Name::a()、$param1 の値が に割り当てられますnull。したがって、基本的にそのパラメーターを渡すことはオプションになります。値があるかどうかを知る必要がある場合は、簡単なチェックを行うことができます。

if (!is_null($param1))
{
 //do something
}
于 2013-01-16T19:42:35.557 に答える
4

関数を再宣言しません。代わりに、引数にデフォルト値を割り当てることで、引数をオプションにすることができます。このような:

function a($param1 = null){ something; }
于 2013-01-16T19:42:41.747 に答える
2

関数を一意に識別しない関数の引数。Java では、引数は厳密に定義されています。これにより、コンパイラは呼び出している関数を認識できます。

しかし、PHP ではそうではありません。

function a()
{
    $args = func_get_args();
    foreach($args as $value)
    {
        echo $value;
    }
}

引数が定義されていない関数を作成することは可能ですが、それでも引数を渡します。

a("こんにちは","世界")

出力します

こんにちは世界

その結果、PHP は a() と a($arg) の違いを認識できません。したがって、a() は既に定義されています。

PHP プログラマーは、この単一関数の問題を処理するためにさまざまな方法を使用しています。

デフォルト値で引数を定義できます。

a($arg = 'ハローワールド');

混合型の変数を渡すことができます。

 function a($mixed)
 {
     if(is_bool($mixed))
     {
         .....
     }
     if(is_string($mixed))
     {
         .....
     }
 }

私の好みは、デフォルトで配列を使用することです。それははるかに柔軟です。

 function a($options=array())
 {
       $default = array('setting'=>true);
       $options = array_merge($default,$options);
       ....
 }

 a(array('setting'=>false);
于 2013-01-16T19:46:13.303 に答える
1

残念ながら、PHP は Java のようなメソッドのオーバーロードをサポートしていません。解決策については、こちらをご覧ください: PHP関数のオーバーロード
func_get_args()進むべき道です:

于 2013-01-16T19:43:40.980 に答える