Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SPL-是否有任何接口或类来控制向数组强制转换时发生的事情?_Php_Arrays_Object_Spl - Fatal编程技术网

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接口在这方面是不完整的。