0

PHPに静的関数があります:

public static function func( $foo, $bar ) {

}

ここ$barで、は整数です。同様の実装をしたいのですが、文字列はfuncどこにありますか$bar。C ++ではオーバーロードを使用しますが、PHPのドキュメントには、オーバーロードはC++と同じようには機能しないことが示されています。私が望むことを達成することができる他の方法はありますか?

私が考えた1つの代替案は、いくつかのポリモーフィズムですが、それは一種のやり過ぎのようです?:

定義された(実装なしの)インターフェースを作成しfunc、2つの異なる方法で実装します。それで:

interface Something {
   public static function func( $foo, $bar );
}

class Something1 implements Something {
   public static function func( $foo, $bar ) {
      // some implementation
   }
}

class Something2 implements Something {
   public static function func( $foo, $bar ) {
      // some other implementation
   }
}

どうもありがとう。

4

3 に答える 3

2

C ++またはその他の静的型付き言語の意味でのオーバーロードは、型のヒントを作成する必要がないため、phpでは意味がありません。これは弱い型の言語の性質であるため、phpにこの機能を含めることにはメリットがありません。任意のタイプの任意の変数を関数に渡すことができます。オブジェクトの場合、多形性の振る舞いを実現するために継承/インターフェースを使用する必要がなく、多態性があります。それはダックタイピングと呼ばれています。

string / intに別の実装が必要な場合は、タイプを確認して、同じ関数で実装を提供してください。

于 2012-11-02T21:04:33.963 に答える
0

このようなものが役立つ可能性があります。$barのタイプを特定してから、対応する関数を呼び出します。

public static function func( $foo, $bar ) {
   if (is_int($bar)) {
       self::funcBarInteger($foo, $bar);
   } else {
       self::funcBarString($foo, $bar);
   }
}

public static function funcBarInteger( $foo, $bar ) {

}

public static function funcBarString( $foo, $bar ) {

}
于 2012-11-02T16:41:52.963 に答える
0

1 つの関数を作成し、そのパラメーターの型に応じて、さまざまなことを行うか、実際の関数 func_int と funct_string を呼び出します。あなたは効果的にディスパッチを自分で行っています。

型を調べるにはgettypeis_..関数があります。

于 2012-11-02T16:39:57.323 に答える