代码之家  ›  专栏  ›  技术社区  ›  tjb

为什么迭代器应用示例中需要第三个参数

php
  •  2
  • tjb  · 技术社区  · 7 年前

    http://php.net/manual/en/function.iterator-apply.php

    我无法从文档中理解为什么在下面的示例中需要第三个参数,即array($it)。

    function print_caps(Iterator $iterator) {
        echo strtoupper($iterator->current()) . "\n";
        return TRUE;
    }
    
    $it = new ArrayIterator(array("Apples", "Bananas", "Cherries"));
    iterator_apply($it, "print_caps", array($it));
    ?>
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   IMSoP    7 年前

    如果您查看第二个参数(回调)的文档,手册会说:

    这是一种相当尴尬的说法,默认情况下(即,如果没有第三个参数),回调将不带参数调用。

    换句话说,这是:

    iterator_apply($some_iterator, $some_callback);
    

    大致相当于:

    foreach ( $some_iterator as $value ) {
        $some_callback();
    }
    

    因为回调没有传递任何参数,所以它看不到迭代器或当前值。

    iterator_apply($some_iterator, $some_callback, [1,2,3]);
    

    foreach ( $some_iterator as $value ) {
        $some_callback(1,2,3);
    }
    

    因此,您正在查看的示例允许回调函数在每次调用迭代器时查看迭代器,方法是将迭代器作为参数传递给回调函数;即:

    iterator_apply($some_iterator, $some_callback, [$some_iterator]);
    

    大致相当于:

    foreach ( $some_iterator as $value ) {
        $some_callback($some_iterator);
    }
    
    推荐文章