13 votes

Existe-t-il un moyen de tester une variable pour "isForEachable" ?

En PHP, existe-t-il une fonction/méthode/moyen de vérifier si une variable contient quelque chose qu'il serait prudent de mettre dans une construction foreach ? Quelque chose comme

//the simple case, would probably never use it this bluntly
function foo($things)
{
    if(isForEachable($things))
    {
        foreach($things as $thing)
        {
            $thing->doSomething();
        }
    }
    else
    {
        throw new Exception("Can't foreach over variable");
    }
}

Si votre réponse est "configurer un gestionnaire pour attraper l'erreur PHP", vos efforts sont appréciés, mais je cherche autre chose.

17voto

Artefacto Points 50896

En quelque sorte. Vous pouvez le faire :

if (is_array($var) || ($var instanceof Traversable)) {
    //...
}

Toutefois, cela ne garantit pas que le foreach sera couronnée de succès. Il se peut qu'elle lève une exception ou qu'elle échoue silencieusement. La raison en est que certains objets itérables, à un moment donné, peuvent ne plus avoir d'informations à fournir (par exemple, ils ont déjà été itérés et il est logique de les itérer une seule fois).

Voir Traversable . Les tableaux ne sont pas des objets et ne peuvent donc pas implémenter cette interface (ils sont antérieurs à celle-ci), mais ils peuvent être parcourus dans une interface de type foreach boucle.

6voto

jchook Points 700

PHP 7

Les versions récentes de PHP ont is_iterable() y el iterable pseudo-type.


PHP 5

Étant donné que tous les objets et tableaux sont des " prévisible "en PHP 5+...

function is_foreachable($var) {
  return is_array($var) || is_object($var);
}

-2voto

shamittomar Points 20136

Vérifier l'utilisation de is_array

if( is_array($things) )
      echo "it is foreachable";
else
      echo "Not it's not foreachable.";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X