代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

有没有办法测试变量的“isForEachable”

  •  11
  • Alana Storm  · 技术社区  · 16 年前

    //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");
        }
    }
    

    3 回复  |  直到 16 年前
        1
  •  17
  •   Artefacto    16 年前

    嗯,算是吧。你可以做:

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

    然而,这并不能保证 foreach 循环将成功。它可能会抛出异常或无声地失败。原因是,某些iterable对象在某个时候可能没有任何信息可以生成(例如,它们已经被迭代过,只需要迭代一次)。

    看到了吗 Traversable . 数组不是对象,因此不能实现这样的接口(它们早于接口),但可以在 foreach公司 循环。

        2
  •  6
  •   jchook    8 年前

    菲律宾比索7

    PHP的最新版本 is_iterable() 以及 iterable 伪类型。


    菲律宾比索5

    因为所有的对象和数组都是“ foreachable

    function is_foreachable($var) {
      return is_array($var) || is_object($var);
    }
    
        3
  •  -2
  •   shamittomar    16 年前

    检查使用 is_array

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