web-dev-qa-db-ja.com

クラスはPHPでいくつのインターフェースを実装できますか?

難しいことではない質問への回答を探していますが、1つのクラスで実装できるインターフェイスの数がわかりません。

これは可能ですか?

class Class1 implements Interface1, Interface2, Interface3, Interface4 {
   .....
}

私が見つけたすべての類似の例について、1つのクラスで実装できるインターフェースは2つだけであることがわかりました。しかし、私が探しているものについての情報はありません。

18
Arnas Pečelis

実装できるインターフェースの数に制限はありません。定義により、extend(継承)できるクラスは1つだけです。

実際の問題として、実装するインターフェイスの数を制限します。クラスが非常に大きくなり、操作が困難にならないようにするためです。

31
Machavity

はい、単一のクラスで3つ以上のインターフェースを実装できます。
PHPマニュアル から:

クラスは、必要に応じて、各インターフェースをコンマで区切ることにより、複数のインターフェースを実装できます。

6
scristalli

上記のステートメントを証明するスクリプトを書きました(量に制限はありません)。

<?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(およびそれ以上)のインターフェイスで簡単に動作します。

数が多すぎる場合、コンピュータのメモリがインターフェイスの量の唯一の制限であるように思われ、メモリ不足エラーが発生します

4
serjoscha

クラスはいくつでも実装でき、制限はありません。

class Class1 implements Interface1, Interface2, Interface3, Interface4, Interface5, Interface6{
   .....
} 

これは正しいことを意味します

2
Utkarsh Dixit

クラスが実装できるインターフェースの数は論理的に制限されていません。

0
hek2mgl