我惊讶地发现reset函数在对象上起作用。
<?php
class C {
private $a = 'a';
protected $b = 'b';
public $c = 'c';
}
$c = new C;
echo reset($c); // a
如果reset收到一个对象,它将首先将其转换为数组? 在文档的任何地方都没有提到。 这是实现细节吗?
答案 0 :(得分:4)
对象未转换为数组。 reset()
函数的本机功能是接受对象并使用它的属性表(尽管此功能并未在任何地方进行实际记录)
但是,如果您在PHP解释器中检出reset()
中的the implementation,则会看到它将函数参数定义为Z_PARAM_ARRAY_OR_OBJECT_HT_EX
,根据内部文档的意思(强调我):< / p>
Z_PARAM_ARRAY_OR_OBJECT_HT
指定应解析为HashTable中的数组或对象的参数。 如果参数是一个对象,则将使用该对象的属性表 .....
使用此类参数的其他函数包括current()
和next()
,它们也可以接受对象作为输入。