【问题标题】:How to detect if object is Traversable in PHP?如何在 PHP 中检测对象是否可遍历?
【发布时间】:2015-10-20 11:55:45
【问题描述】:

我如何检测变量是Traversable 对象以在foreach 循环中使用?

if(is_traversable($variable)) {
    return (array) $variable;
}

【问题讨论】:

    标签: php arrays traversable


    【解决方案1】:

    使用instanceof判断对象是否为Traversable

    if($variable instanceof \Traversable) {
      // is Traversable
    }
    

    【讨论】:

    • 补充一点,如果此代码不在全局命名空间中,它将评估为 false,除非 Traversable 已导入或完全限定,因此 OP 应添加 use Traversable; 或使用 @ 987654327@ 到他们的代码。
    • 应该注意,如 Traversable phpdoc 页面上的 cmets 中所述,对象和数组可以使用 foreach 之类的东西进行迭代,但不是 Traversable 的实例。
    【解决方案2】:

    is_iterable 从 PHP 7.1 起可以使用。

    // https://wiki.php.net/rfc/iterable
    var_dump(
        true === is_iterable([1, 2, 3]),
        true === is_iterable(new ArrayIterator([1, 2, 3])),
        true === is_iterable((function () { yield 1; })())
    );
    

    【讨论】:

    • 我假设可遍历检查是为了确保满足stackoverflow.com/a/6251125/859837 列出的条件。不太确定,但它 is_iterable 可能会给你一个误报,因为数组是可迭代但不可遍历的。
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2017-02-03
    • 2015-10-23
    • 1970-01-01
    • 2015-05-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多