2

因此,通过实现IteratorArrayAccessCountable内置接口,我们可以控制在foreach循环中使用对象或访问属性时,对象内部会发生什么,就好像它是数组索引($object['id'])一样。

例如,如果您愿意,您可以对其进行设置,以便$object['version'] += 1自动增加version数据库中的字段。

缺少的是投射objectto array。是否有任何接口或类可以控制您执行以下操作时发生的情况:(array) $object?任何内置的接口或类,无论多么晦涩难懂?例如:如果我想(array) $object返回$this->propertyArray而不是转储所有公共对象属性的普通对象到数组转换?

注意:像要求$object->toArray()通过方法名调用这样的东西不算数,因为这个想法是尽可能地减少数组和对象之间的外部差异。

4

2 回答 2

1

不,没有,因为 toArray() 不是像 __toString(); 这样的魔术函数;铸造工作的地方,例如

$foo = (string) $myObect;

您必须指定 toArray() 并在其中返回您的数组,将来可能会出现 __toArray() 。

于 2011-02-16T14:17:05.743 回答
0

您可以添加这样的方法

public function toArray() {
    return get_object_vars( $this );
}

见这里。或检查SplFixedArray::toArray

于 2011-02-16T14:36:41.803 回答