2017-09-30 8 views
-1

の未知数とのインタフェース方法は、私はメソッドのパラメータの数が特定のクラスに依存する(ただし、特定のクラスのために固定されている)PHPの - パラメーター

public function foo (int $a, int $b, ..) {..} 

といくつかのクラスがあると仮定。

インターフェイスにこのようなメソッドを配置して、すべてのクラスがそのインターフェイスを実装できる方法はありますか?

私は

public function foo(int ...$ints) {..} 

私は特定のクラスのために持っている必要がありますどのように多くのパラメータを中心に情報を失うとすべての私のfoo実装を定義する必要がありますので、私は、variadicsはここに助けることができるとは思いません。

どんなトリッキーが使用できますか?

P.S.私は実際に例外を避けたいので、引数の数がプログラムで一致するかどうかを確認するだけではありません

+0

個別のパラメータの代わりにパラメータの配列を渡します。 – BSB

+0

@BSBこれはあなたがvariadicsを使用しているものです。あなたが1つのクラスごとに必要なパラメータの数の情報を失うビット – marcosh

+0

完全に理解できませんでした。しかし、渡されるパラメータの数が必要な場合は、配列arrayesを数えることができます。 – BSB

答えて

0

func_num_argsまたはcount($ints)のようなものを使用せずに例外をスローする方法はありません。

これは潜在的なデザイン上の瑕疵のようです。

インターフェイスが本当に必要で、パラメータが値のセットであれば、実際には配列を受け取り、配列内の項目の数と型をチェックすることをお勧めします。

+0

私のインターフェイスはあまりにも私の目的には制限があると思います。それでも私は、クラスにあまりにも多くの整数を受け取るメソッドがあることを伝える方法があるとは思っていません – marcosh

-1

パラメータが異なる場合、メソッドの名前は同じですが、同じインターフェイスではありません。それは簡単です。

角の穴に丸いペグを入れようとしています。

+0

ええ、インターフェイスがあまりにも多すぎます。私ができることは、物事に名前を付けるだけの、空のインターフェースを持つことです。数多くのインタフェース、引数の数ごとに1つ。それでも、これらは素晴らしい解決策ではありません – marcosh

+0

各パラメータを別々にするのではなく、代わりにインスタンスを渡すことができます。 –

関連する問題