abstract class SF_Model_Acl_Abstract
extends SF_Model_Abstract
implements SF_Model_Acl_Interface, Zend_Acl_Resource_Interface
{
protected $_acl;
protected $_identity;
public function setIdentity($identity)
{
if (is_array($identity)) {
......
......
Can you help me explain how it can "implements" "extends" at the same time?
Does it just combine the 3 class together? I am totally confused!
5 Réponses :
exemple: p> Ce code jette une erreur fatale en ligne 5 Comme méthode de l'interface n'est pas correctement implémentée (Argument manquant).
Il lancerait également une erreur fatale dans la ligne 6 car la méthode de l'interface n'est pas mise en œuvre du tout. P> p> s'étend code> est destiné à héritage, c'est-à-dire héritant les méthodes / champs de la classe. Une classe PHP ne peut hériter que d'une classe. Implements code> est destiné aux interfaces de mise en œuvre. Il est simplement nécessaire que la classe ait les méthodes définies dans les interfaces implémentées. P>
Merci, mec ~ je me sens beaucoup mieux maintenant ... Je suppose que l'astuce consiste à faire une distinction qui s'étend est destinée aux héritages, tandis que des outils pour rendre les fonctions d'interface.
Je viens d'avoir le même problème au travail .. Extension de la classe et en mettant en œuvre un autre 3! Quoi qu'il en soit, il est toujours utile de consulter le manuel PHP sur Héritage et < Un href = "http://php.net/manual/fr/language.oop5.interfaces.php" rel = "Nofollow Noreferrer"> Interfaçage
Oui, PHP peut implémenter plusieurs interfaces à l'aide d'outils
Il implémente simplement des interfaces, qui décrivent quelles méthodes sont nécessaires, d'autres méthodes ont une interface définie à fonctionner, voir http://php.net/manual/fr/language.oop5.interfaces.php p>
Les outils et s'étend sont deux types de chaussures différentes. P>
s'étends indique le compilateur / interprète que la classe est dérivée d'une autre classe.
Les outils indiquent le compilateur / interprète, que la classe doit mettre en œuvre un contrat, défini dans une interface. P>
Rechercher des interfaces, car ils sont la colonne vertébrale de la polymorphie dans OOP. S'étend fondamentalement implémente l'interface publique (et semi-publique, protégée) de la super classe automatiquement, comme vous en dérivez. P>
s'étend code> peut utiliser et / ou remplacer la méthode des parents. P>
Implements code>: Doit avoir toutes les méthodes d'interface: chaque méthode de l'interface doit être au moins déclarée dans la classe qui implémente. P>
C'est fondamentalement la même chose. Mais puisque PHP suit un paradigme de OOP plus limité, il ne prend pas en charge plusieurs héritages. Par conséquent, il utilise des signatures de classe vide (= interfaces) et ne prend en charge qu'une seule héritage réelle (= étend la classe).
alors Java suit également une OOP plus limitée;) - Kudos php vous n'êtes pas derrière
L'héritage multiple est considérée comme une mauvaise pratique, car elle conduit à un code vraiment difficile, et nous savons tous: de bonnes choses sont simples. Le monde peut vivre sans elle, l'expérience l'a prouvé.
@Falcon: Je ne veux pas commencer une discussion non pertinente ici, mais la partie "mauvaise pratique" est subjective, la simplicité des interfaces vs vs et le monde peut vivre sans OOP.
@FALCON: Cela peut être une mauvaise fonctionnalité dans les langages de compilation statique en raison de la priorité de la fonction (voir problème de diamant), mais fonctionne assez bien dans les langages de script (voir Python). C2.com/cgi/wiki?MultiLiChheritanceSnotevil - La fonction de traits planifiée dans PHP 5.4 ajoute de manière significative plus Complexité syntaxique et sémantique qu'elle ne tente de résoudre un problème d'éviscération à cause d'un meme surgénéralisé.