Ala*_*orm 11 php foreach iterator
使用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");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的答案是"设置一个处理程序以捕获PHP错误",那么您的努力将受到赞赏,但我正在寻找其他的东西.
Art*_*cto 15
好吧,有点.你可以做:
if (is_array($var) || ($var instanceof Traversable)) {
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不能保证foreach循环成功.它可能会抛出异常或无声地失败.原因是某些可迭代对象在某些时候可能没有任何信息可以产生(例如,它们已经被迭代,只有迭代它们才有意义).
见Traversable.数组不是对象,因此不能实现这样的接口(它们先于它),但它们可以在foreach循环中遍历.
最新版本的 PHP 有is_iterable()和iterable伪类型。
由于所有对象和数组在 PHP 5+中都是“ foreachable ”的......
function is_foreachable($var) {
return is_array($var) || is_object($var);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |