PHP 7.1 a ajouté la nouvelle fonction is_iterable pour vérifier si une variable peut être itérée. Mais bien que vous puissiez itérer sur les propriétés d'un objet, is_iterable
renvoie false pour eux.Pourquoi les objets ne sont-ils pas considérés comme itératifs alors qu'ils le sont réellement?
Cela semble être intentionnel, car il est documenté et je n'ai pas trouvé de bogues PHP concernant le problème, mais je me demande pourquoi cela a été fait?
<?php
$a = new stdClass();
$a->foo = 'bar';
var_dump(is_iterable($a));
foreach ($a as $key => $value) {
var_dump($key, $value);
}
Sorties
boolean false
string 'foo' (length=3)
string 'bar' (length=3)
Mais j'attendre à la sortie
boolean true
string 'foo' (length=3)
string 'bar' (length=3)
Cela semble à peu près juste pour une réponse liée à PHP ... meh ¯ \\ _ (ツ) _/¯. – deceze
* Un objet n'implémente pas Traversable si vous ne le faites pas vous-même * et * Ceci est une interface moteur interne qui ne peut pas être implémentée dans les scripts PHP. * Http://php.net/manual/fr/class.traversable .php. Une impasse? –
@Alex Phrase suivante: * "Soit' IteratorAggregate' ou 'Iterator' doit être utilisé à la place." * (Note: les deux sont des sous-classes de 'Traversable' ...) – deceze