Bonjour je cherche actuellement à mieux saisir la POO et je suis sur les interfaces. Prenons l'exemple avec l'interface Iterator:
et la si je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 class MyIterator implements Iterator { public function current() { //on implemente la fonction pour l'adapter à notre classe } public function key() { //on implemente la fonction pour l'adapter à notre classe } public function rewind() { //on implemente la fonction pour l'adapter à notre classe } public function next() { //on implemente la fonction pour l'adapter à notre classe } public function valid() { //on implemente la fonction pour l'adapter à notre classe } }
Ben ça donne l'itération implémentée dans ma classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $object = new MyIterator(); foreach($object as $key => $value) { //ce que je veux }
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 !
Partager