使用PHP,是否有一种函数/方法/方法来检查变量是否包含可以安全放入foreach构造的东西?像
这样的东西//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");
}
}
如果您的答案是“设置处理程序以捕获PHP错误”,那么您的努力将受到赞赏,但我正在寻找其他内容。
答案 0 :(得分:15)
if (is_array($var) || ($var instanceof Traversable)) {
//...
}
但是,这并不能保证foreach
循环成功。它可能会抛出异常或无声地失败。原因是某些可迭代对象在某些时候可能没有任何信息可以产生(例如,它们已经被迭代,只有迭代它们才有意义。)
见Traversable
。数组不是对象,因此不能实现这样的接口(它们先于它),但它们可以在foreach
循环中遍历。
答案 1 :(得分:2)
最新版本的PHP有is_iterable()
和iterable
伪类型。
由于所有对象和数组都是" foreachable"在PHP 5 + ...
function is_foreachable($var) {
return is_array($var) || is_object($var);
}
答案 2 :(得分:-2)
使用is_array
if( is_array($things) )
echo "it is foreachable";
else
echo "Not it's not foreachable.";