PHP ne peut pas s'étendre à partir de l'interface?
J'écris ci-dessous dans un fichier php.
<?php
interface people
{
public function take($s);
}
class engineer extends people
{
public function take($s){
echo $s;
}
}
?>
Le peuple est une interface, l'ingénieur s'étend de personnes.
Mais lorsque j'exécute ce code, le message d'erreur:
Fatal error: Class engineer cannot extend from interface people in E:\php5\Mywwwroot\b.php on line 12
Ce qui s'est passé? Ma version de PHP est de 5,4.
Classes implémentent des interfaces, de ne pas les prolonger.
PHP utilise la méthode Java pour empêcher le diamant problème - Voir en.wikipedia.org/wiki/Multiple_inheritance - d'où le mot-clé implements
Merci à vous tous de vous. Folles de moi.
Juste une parenthèse ici, alors votre problème est techniquement fixe, cet exemple pourrait être mieux adapté à l'héritage de classe, par opposition à l'implémentation de l'interface. C'est un ingénieur est un type de personne, et de prendre sur la plupart des méthodes et la fonctionnalité d'une personne, ainsi que d'autres, ingénieur spécifiques, des méthodes. Par conséquent, vous n'êtes pas la mise en œuvre d'une interface, mais sont au contraire de prolonger la "personne" de la classe. Je ne serait certainement pas aller aussi loin que de faire de "personne" est une classe abstraite ou quoi que ce soit, même si, comme il semble raisonnable que vous pouvez utiliser la classe de base dans l'isolement.
A ma réponse réponse à votre question?
PHP utilise la méthode Java pour empêcher le diamant problème - Voir en.wikipedia.org/wiki/Multiple_inheritance - d'où le mot-clé implements
Merci à vous tous de vous. Folles de moi.
Juste une parenthèse ici, alors votre problème est techniquement fixe, cet exemple pourrait être mieux adapté à l'héritage de classe, par opposition à l'implémentation de l'interface. C'est un ingénieur est un type de personne, et de prendre sur la plupart des méthodes et la fonctionnalité d'une personne, ainsi que d'autres, ingénieur spécifiques, des méthodes. Par conséquent, vous n'êtes pas la mise en œuvre d'une interface, mais sont au contraire de prolonger la "personne" de la classe. Je ne serait certainement pas aller aussi loin que de faire de "personne" est une classe abstraite ou quoi que ce soit, même si, comme il semble raisonnable que vous pouvez utiliser la classe de base dans l'isolement.
A ma réponse réponse à votre question?
OriginalL'auteur roast_soul | 2013-09-16
Vous devez vous connecter pour publier un commentaire.
Vous mettre en œuvre interfaces et étendre classes:
Non, vous n'êtes pas stupide, le message d'erreur est muet. Tout ce qu'ils ont eu à faire est de passer 2 secondes penser à ce que le plus clair de message d'erreur, et bam, le problème est résolu pour tous les programmeurs PHP à travers le monde. Mais au lieu de cela, ils ont choisi un message d'erreur qui semble comme il ya quelque chose à propos de cet interface et la classe particulière en train de s'étendre, il ne fonctionnera pas, plutôt que l'idée de base que toute la classe ne peut jamais s'étendre à une interface.
OriginalL'auteur John Conde
extends
est pour étendre une autre classe.Pour les interfaces, vous devez utiliser
implements
à la place.(Une interface peut
extend
une autre interface, tout de même)An interface can extend another interface, though
Mais une signature de méthode m1(AInterface $obj) dans la classe A ne peut pas être remplacé par m1(BInterface $obj) même
"les Interfaces peuvent être étendues, telles que les classes à l'aide de la s'étend de l'opérateur." php.net - interfaces
OriginalL'auteur Spudley
Dépend de ce que vous voulez, il pourrait être:
Vous pouvez étendre une seule classe/interface et de mettre en œuvre de nombreuses interfaces. Vous pouvez étendre interface à une autre interface, interface par exemple DieselEngineInterface s'étend EngineInterface.
Aussi noter un commentaire, maintenant que vous pouvez avoir de la classe et de l'interface de la hiérarchie, vous avez besoin de savoir quand les utiliser.
OriginalL'auteur imel96
J'utilise:
interface xyz{…}
.Puis
class abc implements xyz
j'obtiens:OK!
donc
extend
abc
dexyz
j'obtiens:cours d'exécution dans eclipse "oxygène" php 7
GOOD JOB!!!
OriginalL'auteur george