|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Étudiant Inscription : juin 2011 Messages : 94 ![]() |
Bonjour je cherche actuellement à mieux saisir la POO et je suis sur les interfaces. Prenons l'exemple avec l'interface Iterator:
Code :
Code :
Je me dis alors c'est super les interfaces! sauf que d'un coup je me demande: "Attends mais comment ça marche, c'est magique ou quoi ?" Comment le fait de définir ces 5 méthodes fait que celles ci soient maintenant utilisées par la fonction php "foreach" Je voudrais donc qu'on m'explique un peu plus le fonctionnement interne de la fonction php "foreach" (j'ai cherché le code mais j'ai pas trouvé). Est ce qu'à chaque fois "foreach" cherche si les méthodes current(),key(),rewind(),next() et valid() sont implémentées dans la classe qu'il doit itérer et si oui il les utilise?? Est ce que si je définis ces fonctions dans une classe sans que celle ci implémente Iterator alors ça marche aussi ou le fait que ce soit l'interface "Iterator" qui doit être implémentée est important dans le code source de la fonction "foreach" ?? Je sais que c'est un peu de la masturbation cérébrale qui sert à rien (ça marche, c'est que ça marche) mais j'en ai besoin pour comprendre le vrai sens des interfaces pour par la suite les utiliser. Merci et désolé pour le mal de crâne ! |
||||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() ![]() Sébastien AlfaiateDéveloppeur Web Inscription : janvier 2007 Messages : 1 329 ![]() |
Une interface, ça ne fait que définir des méthodes qui doivent être implémenté dans l’objet qui l'implémente.
Cela veux dire que si tu crais une classe qui implémente l'interface iterator, tu sera forcé de définir les méthodes de cette interface dans ton objet. Et bien sur, le code qui va avec. Ce n'est pas "magique", le simple fait de d'implémenter iterator ne va pas te permettre de faire fonctionner la fonction foreach pour parcourir le contenu de ton objet. Il faut que tu codes le contenu des méthodes qui va permettre de le parcourir. A savoir : current(), key(), etc... Parceque c'est ces méthodes qui seront utilisé par foreach pour parcourir ton objet. Citation:
Edit : Non ça ne fonctionne pas, je viens de faire le test. Il faut obligatoirement implémenter l'interface Iterator si tu veux que ton foreach fonctionne.
__________________
Zend Certified Engineer PHP 5.3 « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana |
|
|
00
|
|
|
#3 | |||
|
Membre du Club
![]() Étudiant Inscription : juin 2011 Messages : 94 ![]() |
Salut Seb, merci pour ta réponse
Citation:
Citation:
Tel que je l'avais marqué plus haut: Citation:
|
|||
|
|
00
|
|
|
#4 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 133 ![]() |
Citation:
http://www.php.net/manual/fr/class.i....example.basic
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#5 |
![]() ![]() Développeuse PHP/Java Inscription : avril 2007 Messages : 3 661 ![]() |
Et aussi : Itération sur des objets
En pratique, si ta classe n'implémente pas Iterator, le foreach va parcourir tous les attributs visibles qu'il trouve.
__________________
Modératrice PHP Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com