2015-02-11 11 views
6

Ich bin auf der Suche nach einer Antwort auf die Frage, die nicht schwierig ist, aber ich kann nicht herausfinden, wie viele Schnittstellen von einer Klasse implementiert werden können.Wie viele Schnittstellen kann eine Klasse in PHP implementieren?

Ist das möglich?

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

Für alle ähnlichen Beispiele, die ich gefunden habe, habe ich gesehen, dass es nur 2 Schnittstellen von einer Klasse implementiert werden kann. Aber es gibt keine Informationen darüber, wonach ich suche.

+2

Solange es in diesen Schnittstellen keine in Konflikt stehenden Methodennamen gibt, glaube ich, dass es keine praktische Grenze gibt. –

Antwort

15

Die Anzahl der Schnittstellen, die Sie implementieren können, ist nicht begrenzt. Per Definition können Sie nur eine Klasse extend (erben).

Ich würde praktisch die Anzahl der Schnittstellen beschränken, die Sie implementieren, damit Ihre Klasse nicht zu sperrig und damit schwer zu arbeiten wird.

+0

Sie sagen also, dass dieser Weg möglich ist? 'class Class1 implementiert Interface1, Interface2, Interface3, Interface4 {' –

+1

Ich sehe kein Problem bei der Implementierung von mehreren tausend Schnittstellen. Es erleichtert die Arbeit. – hek2mgl

+0

@ ArnasPečelis Richtig. Und Sie können auch Ihre Schnittstellen namespace – Machavity

0

Die Anzahl der Schnittstellen, die eine Klasse implementieren kann, ist nicht logisch begrenzt.

3

Ich schrieb ein Skript, das oben Gesagte beweist (dass die Menge nicht beschränkt ist):

<?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)); 

können Sie den Zähler var in der for-Schleife ändern, um das Skript noch mehr Schnittstellen zu machen erzeugen, indem sie umgesetzt werden die Klasse "Bar".

Es funktioniert leicht mit bis zu 9999 Schnittstellen (und offensichtlich mehr), wie Sie aus der Ausgabe der letzten Codezeile (print_r) bei der Ausführung dieses Skripts sehen können.

Der Speicher des Computers die einzige Einschränkung für die Menge an Schnittstellen zu sein scheint für Sie einen Speicher erschöpft Fehler, wenn die Zahl zu hoch ist

+1

Vielen Dank für das tolle Beispiel und Speicher ist eigentlich kein Problem dafür. –

0

Sie so viel Klasse implementieren können Sie wollen, gibt es keine Einschränkung, dass ist .

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

Dies bedeutet dies die richtige Hoffnung ist, dies hilft Ihnen

3

Ja, mehr als zwei Schnittstellen, die von einer einzigen Klasse implementiert werden können.
Vom PHP manual:

Klassen können mehr als eine Schnittstelle implementieren, wenn durch jede Schnittstelle mit einem Komma trennt gewünscht.