调用对象重置?

时间:2019-02-23 21:53:16

标签: php

我惊讶地发现reset函数在对象上起作用。

<?php

class C {
  private $a = 'a';
  protected $b = 'b';
  public $c = 'c';
}

$c = new C;
echo reset($c); // a

如果reset收到一个对象,它将首先将其转换为数组? 在文档的任何地方都没有提到。 这是实现细节吗?

1 个答案:

答案 0 :(得分:4)

对象未转换为数组。 reset()函数的本机功能是接受对象并使用它的属性表(尽管此功能并未在任何地方进行实际记录)

但是,如果您在PHP解释器中检出reset()中的the implementation,则会看到它将函数参数定义为Z_PARAM_ARRAY_OR_OBJECT_HT_EX,根据内部文档的意思(强调我):< / p>

  

Z_PARAM_ARRAY_OR_OBJECT_HT

     

指定应解析为HashTable中的数组或对象的参数。 如果参数是一个对象,则将使用该对象的属性表 .....

     

phpinternals

使用此类参数的其他函数包括current()next(),它们也可以接受对象作为输入。