我正在阅读http://php.net/manual/en/class.iterator.php,但是很难理解示例#1的基本用法。问题:
-
var_dump(__METHOD__);
我知道你可以在这里使用变量,例如:
var_dump($count)
,但方法不是变量,或者它是全局变量/常量? -
foreach($it as $key => $value) { var_dump($key, $value); echo "'n"; }
如果我把它改成:
foreach($it as $key => $value) { }
如果我运行脚本,它仍然可以显示结果,为什么?
-
var_dump($key, $value);
结果是
int 0 string 'firstelement' (length=12)
int 1 string 'secondelement'(长度=13)…
为什么是这个结果?
foreach($it as $key => $value)
, $it是对象,它不是$数组,所以这是怎么发生的?
Iterator
接口允许类在foreach
语句中表现得像一个数组。
因为它不是数组,类必须知道在这种情况下如何表现。这是通过调用(通过foreach
,为了简单起见)一些从Iterator
接口实现的方法来完成的。因为这是接口需求,所以应该实现所有的方法,即使您不打算使用其中的一些方法,比如检索键。
在方法中,你可以输入任何你喜欢的东西,甚至是在foreach
循环中没有意义的东西(比如你不增加计数器$position
)。
在手册中,var_dump()
用于显示调用哪些方法。__METHOD__
伪常量是一个返回当前方法名称的字符串。您应该删除这些行,因为它们仅用于示例目的。
Iterator
接口中的每个方法都是公共的,因此您可以在代码中的任何位置调用它们,但不需要在程序中调用它们。在foreach
循环中,它们是自动调用的,所以这就是空循环工作的原因。