关于oop:一个类可以在PHP中实现多少个接口?

How many interfaces can a class implement in PHP?

我正在寻找一个问题的答案,这并不困难,但我不知道一个类可以实现多少个接口。

这有可能吗?

1
2
3
class Class1 implements Interface1, Interface2, Interface3, Interface4 {
   .....
}

对于我发现的所有类似的例子,我已经看到一个类只能实现两个接口。但是没有任何关于我要找什么的信息。


您可以实现的接口数量没有限制。根据定义,您只能继承一个类。

实际上,我会限制您实现的接口的数量,以免您的类变得过于庞大,从而难以使用。


是的,一个类可以实现两个以上的接口。从PHP手册:

Classes may implement more than one interface if desired by separating
each interface with a comma.


我写了一个证明上述声明的脚本(金额不受限制):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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循环中的counter var,使该脚本生成更多的接口,以便由类"bar"实现。

它很容易与最多9999个接口(显然更多)一起工作,正如您在执行该脚本时从最后一行代码(print_r)的输出中看到的那样。

计算机的内存似乎是接口数量的唯一限制,当数量太高时,会出现内存耗尽错误。


您可以实现任意多的类,这是没有限制的。

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

这意味着这是对的希望这对你有帮助


类可以实现的接口数量在逻辑上没有限制。