PHP SPL-是否有任何接口或类来控制向数组强制转换时发生的事情?
因此,通过实现PHP SPL-是否有任何接口或类来控制向数组强制转换时发生的事情?,php,arrays,object,spl,Php,Arrays,Object,Spl,因此,通过实现迭代器、ArrayAccess和可计数内置接口,我们可以控制对象在foreach循环中使用时内部发生的情况,或者访问属性时是否将其作为数组索引($object['id']) 例如,如果需要,可以将其设置为$object['version']+=1可以自动增加数据库中的version字段 缺少的是将对象强制转换为数组。是否有任何接口或类允许控制执行以下操作时发生的情况:(数组)$object?任何内置接口或类,无论多么模糊?例如:如果我希望(数组)$object返回$this->pr
迭代器
、ArrayAccess
和可计数
内置接口,我们可以控制对象在foreach
循环中使用时内部发生的情况,或者访问属性时是否将其作为数组索引($object['id']
)
例如,如果需要,可以将其设置为$object['version']+=1
可以自动增加数据库中的version
字段
缺少的是将对象
强制转换为数组
。是否有任何接口或类允许控制执行以下操作时发生的情况:(数组)$object
?任何内置接口或类,无论多么模糊?例如:如果我希望(数组)$object
返回$this->propertyArray
,而不是转储所有公共对象属性的普通对象到数组转换
注意:像要求通过方法名调用
$object->toArray()
这样的要求并不重要,因为这样做的目的是尽可能减少数组和对象之间的外部差异。没有,因为toArray()不是像u-toString()那样的神奇函数;铸造工作的地方,例如
$foo = (string) $myObect;
您必须指定toArray()并在其中返回您的数组,可能在将来uu toArray()可能会出现。您可以添加如下方法
public function toArray() {
return get_object_vars( $this );
}
。或者检查。施法给你带来了什么?@alex:刚刚更新了问题。铸造没有什么异常。。。这就是问题所在。如果可能的话,这个想法是使用SPL扩展来覆盖铸造行为。添加到
ArrayAccess
。但它只提供了一个::getArrayCopy()
,在强制转换IIRC时不会调用它。但这仍然可能是最好的调查方法,首先是使用::ARRAY\u AS_PROPS
模式。@mario:您知道在任何情况下是否自动调用getArrayCopy()
?例如,如果在$array=clone$object
上自动调用,splfixedaray::toArray
与我所指的最接近。但是,我希望有一个神奇的SPL接口,当一个对象被投射到数组中时会发生什么。我相信你是对的。我想我太有希望了。看起来SPL magic array接口在这方面是不完整的。