難しいことではない質問への回答を探していますが、1つのクラスで実装できるインターフェイスの数がわかりません。
これは可能ですか?
class Class1 implements Interface1, Interface2, Interface3, Interface4 {
.....
}
私が見つけたすべての類似の例について、1つのクラスで実装できるインターフェースは2つだけであることがわかりました。しかし、私が探しているものについての情報はありません。
実装できるインターフェースの数に制限はありません。定義により、extend
(継承)できるクラスは1つだけです。
実際の問題として、実装するインターフェイスの数を制限します。クラスが非常に大きくなり、操作が困難にならないようにするためです。
はい、単一のクラスで3つ以上のインターフェースを実装できます。
PHPマニュアル から:
クラスは、必要に応じて、各インターフェースをコンマで区切ることにより、複数のインターフェースを実装できます。
上記のステートメントを証明するスクリプトを書きました(量に制限はありません)。
<?php
$inters_string = '';
$interfaces_to_generate = 9999;
for($i=0; $i <= $interfaces_to_generate; $i++) {
$cur_inter = 'inter'.$i;
$inters[] = $cur_inter;
$inters_string .= sprintf('interface %s {} ', $cur_inter);
}
eval($inters_string); // creates all the interfaces due the eval (executing a string as code)
eval(sprintf('class Bar implements %s {}', implode(',',$inters))); // generates the class that implements all that interfaces which were created before
$quxx = new Bar();
print_r(class_implements($quxx));
Forループのカウンター変数を変更して、そのスクリプトがクラス "Bar"によって実装されるさらに多くのインターフェイスを生成するようにすることができます。
このスクリプトを実行すると、最後のコード行(print_r)の出力からわかるように、最大9999(およびそれ以上)のインターフェイスで簡単に動作します。
数が多すぎる場合、コンピュータのメモリがインターフェイスの量の唯一の制限であるように思われ、メモリ不足エラーが発生します
クラスはいくつでも実装でき、制限はありません。
class Class1 implements Interface1, Interface2, Interface3, Interface4, Interface5, Interface6{
.....
}
これは正しいことを意味します
クラスが実装できるインターフェースの数は論理的に制限されていません。