How to check if variable is array?... or something array
 I want to use a foreach loop with a variable, but this variable can be many different types, NULL for example.  
 So before foreach I test it:  
if(is_array($var)){
  foreach($var as ...
 But I realized that it can also be a class that implements Iterator interface.  Maybe I am blind but how to check whether the class implements interface?  Is there something like is_a function or inherits operator?  I found class_implements , I can use it, but maybe there is something simpler?  
 And second, more important, I suppose this function exist, would be enough to check if the variable is_array or "implements Iterator interface" or should I test for something more?  
 If you are using foreach inside a function and you are expecting an array or a Traversable object you can type hint that function with:  
function myFunction(array $a)
function myFunction(Traversable)
 If you are not using foreach inside a function or you are expecting both you can simply use this construct to check if you can iterate over the variable:  
if (is_array($a) or ($a instanceof Traversable))
 foreach can handle arrays and objects.  You can check this with:  
$can_foreach = is_array($var) || is_object($var);
if ($can_foreach) {
    foreach ($var as ...
}
 You don't need to specifically check for Traversable as others have hinted it in their answers, because all objects - like all arrays - are traversable in PHP.  
More technically:
 foreach works with all kinds of traversables, ie with arrays, with plain objects (where the accessible properties are traversed) and Traversable objects (or rather objects that define the internal get_iterator handler).  
(source)
Simply said in common PHP programming, whenever a variable is
and is not
 you can use foreach on it.  
 You can check instance of Traversable with a simple function.  This would work for all this of Iterator because Iterator extends Traversable  
function canLoop($mixed) {
    return is_array($mixed) || $mixed instanceof Traversable ? true : false;
}
                        链接地址: http://www.djcxy.com/p/53038.html
                        
                        下一篇: 如何检查变量是否是数组?
