2013-04-15 3 views
4

Je lis http://php.net/manual/en/class.iterator.php, mais j'ai eu du mal à comprendre l'exemple # 1 d'utilisation de base. Questions:essayer de comprendre l'interface Iterator dans php

  1. var_dump(__METHOD__);

    Je sais que vous pouvez utiliser la variable ici, par exemple: var_dump($count), mais MÉTHODE n'est pas variable, ou il est variable globale/constante?

  2. foreach($it as $key => $value) { 
        var_dump($key, $value); 
        echo "\n"; 
    } 
    

    si je change à:

    foreach($it as $key => $value) { 
    } 
    

    si je lance le script, il peut montrer encore les résultats, pourquoi?

  3. var_dump($key, $value);

    le résultat est

    int 0 chaîne 'FirstElement' (longueur = 12)

    int une chaîne 'secondElement' (longueur = 13)

    ...

    pourquoi c'est ce résultat? foreach($it as $key => $value), $ c'est un objet, ce n'est pas $ array, alors comment cela peut-il arriver?

+0

S'il vous plaît, essayez de formater votre question un peu! http://stackoverflow.com/editing-help – deceze

+2

La constante '__METHOD__' est une valeur interne de PHP qui indique le nom de la méthode en cours (c'est-à-dire le nom de la méthode en cours de traitement). Ces 'var_dumps()' sont pour vous montrer la séquence d'appel en faisant 'foreach'. Supprimez-les bien sûr dans votre programme. – Voitcus

+0

Modifier le 'foreach' pour qu'il n'utilise pas les touches est correct, l'exemple est le" plus grand "pour vous montrer tous les aspects. Cette représentation est faite en imprimant la pseudo-constante '__METHOD__'. – Voitcus

Répondre

1

L'interface Iterator permet à la classe de se comporter comme il était un tableau dans l'instruction foreach. Parce que ce n'est pas un tableau, la classe doit savoir comment se comporter dans cette situation. Cela est fait en appelant (par le foreach, disons pour simplifier) ​​certaines méthodes qui sont implémentées à partir de l'interface Iterator. Comme il s'agit des exigences d'interface, toutes les méthodes doivent être implémentées, même si vous n'utilisez pas certaines d'entre elles, comme la récupération de la clé.

Dans les méthodes que vous pouvez taper ce que vous voulez, même quelque chose qui n'a pas de sens dans la boucle foreach (disons que vous n'augmentez pas le compteur $position).

Dans le manuel, les var_dump() s vous indiquent les méthodes utilisées. La pseudo-constante __METHOD__ est une chaîne qui renvoie le nom de la méthode en cours. Vous devez supprimer ces lignes, car elles sont données uniquement à titre d'exemple.

Chacune des méthodes de l'interface Iterator est publique, vous pouvez donc les appeler à partir de n'importe quel endroit du code, mais il n'est pas nécessaire de les appeler dans votre programme. Dans la boucle foreach, ils sont appelés automatiquement, c'est pourquoi votre boucle vide fonctionne.

+0

Voitcus, merci pour votre explication. J'ai mieux compris. – user2243528