web-dev-qa-db-fra.com

Combien d'interfaces une classe peut-elle implémenter en PHP?

Je cherche une réponse à une question qui n'est pas difficile, mais je ne peux pas savoir combien d'interfaces peuvent être implémentées par une classe.

Est-ce possible?

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

Pour tous les exemples similaires que j'ai trouvés, j'ai vu qu'il ne peut y avoir que 2 interfaces implémentées par une classe. Mais il n'y a aucune information sur ce que je recherche.

18
Arnas Pečelis

Il n'y a pas de limite au nombre d'interfaces que vous pouvez implémenter. Par définition, vous ne pouvez extend (hériter) qu'une seule classe.

Je voudrais, en pratique, limiter le nombre d'interfaces que vous implémentez, de peur que votre classe ne devienne trop volumineuse et donc difficile à travailler.

31
Machavity

Oui, plus de deux interfaces peuvent être implémentées par une seule classe.
Dans le manuel PHP :

Les classes peuvent implémenter plusieurs interfaces si vous le souhaitez en séparant chaque interface par une virgule.

6
scristalli

J'ai écrit un script qui prouve les déclarations ci-dessus (que le montant n'est pas limité):

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

Vous pouvez modifier le compteur var dans la boucle for pour que ce script génère encore plus d'interfaces à implémenter par la classe "Bar".

Il fonctionne facilement avec jusqu'à 9999 interfaces (et évidemment plus) comme vous pouvez le voir sur la sortie de la dernière ligne de code (print_r) lors de l'exécution de ce script.

La mémoire de l'ordinateur semble être la seule limitation de la quantité d'interfaces car vous obtenez une erreur de mémoire épuisée lorsque le nombre est trop élevé

4
serjoscha

Vous pouvez implémenter autant de classes que vous le souhaitez, il n'y a aucune limitation à cela.

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

Cela signifie que c'est vrai J'espère que cela vous aide

2
Utkarsh Dixit

Le nombre d'interfaces qu'une classe peut implémenter n'est pas logiquement limité.

0
hek2mgl