4

我正在阅读http://php.net/manual/en/class.iterator.php,但很难理解示例 #1 的基本用法。问题:

  1. var_dump(__METHOD__);

    我知道你可以在这里使用变量,例如:var_dump($count),但是METHOD不是变量,或者它是全局变量/常量?

  2. foreach($it as $key => $value) {
        var_dump($key, $value);
        echo "\n";
    }
    

    如果我将其更改为:

    foreach($it as $key => $value) {
    }
    

    如果我运行脚本,它仍然可以显示结果,为什么?

  3. var_dump($key, $value);

    结果是

    int 0 字符串“第一个元素”(长度=12)

    int 1 字符串 'secondelement' (长度=13) ...

    为什么是这个结果?foreach($it as $key => $value), $it 是对象,它不是 $array,怎么会这样呢?

4

1 回答 1

1

Iterator接口允许类在foreach语句中表现得像一个数组。

因为它不是数组,所以类必须知道在这种情况下如何表现。这是通过调用(通过foreach,为了简单起见)一些从Iterator接口实现的方法来完成的。由于它是接口要求,因此所有方法都应该实现,即使您不打算使用其中一些方法,例如检索密钥。

在方法中,您可以输入您喜欢的任何内容,甚至是在循环中没有意义的foreach内容(比如您不增加 counter $position)。

在手册中,var_dump()s 用于显示调用了哪些方法。__METHOD__伪常量是返回当前方法名称的字符串。您应该删除这些行,因为它们仅用于示例目的。

接口中的每个方法Iterator都是公共的,因此您可以从代码中的任何位置调用它们,但无需在程序中调用它们。在foreach循环中它们被自动调用,这就是你的空循环起作用的原因。

于 2013-04-15T06:43:46.203 回答