2014-12-02 83 views
2

实现了ArrayAccess当你实现一个类的_toString方法的对象,您可以将对象转换字符串PHP转换阵列

$string =(string) $object 

是否有在数组转换成等价

$array=(array) $object 

从我测试过的代码中,即使此对象实现ArrayAccess,objet的属性也会转换为数组的索引。

我预计,铸造用数组访问的对象,我会获得thith相同值的数组我可以访问对象

public function MyObject implements ArrayAccess{ 
    private $values; 
    public function __construct(array $values){ 
     $this->values=$values; 
    } 
    public function offsetSet($name,$value){ 
     $this->values[$name]=$value; 
    } 
    //etc... 
} 

$myObject=new MyObject(array('foo'=>'bar'); 

$asArray=(array)$myObject; 

print_r($asArray); 
// expect array('foo'=>'bar') 
// but get array('MyObjectvalues'=>array('foo'=>'bar')); 

我也请注意,本机ArrayObject的类有一个我所期望的行为

+0

从ArrayObject派生并重用getArrayCopy;或者通过返回$ values prop重新实现它。由于没有'__toArray'处理,投射将不起作用。 – mario 2014-12-02 09:39:08

+0

'公共函数MyObject实现ArrayAccess {'< - 这是无效的PHP语法。你想'class MyObject实现ArrayAccess {...'。 – faintsignal 2017-08-22 21:13:52

回答

1

不,没有magic function将对象作为数组进行投射。

ArrayObject是用C实现的,具有奇怪的特定行为。

实施自定义方法asArray并使用它。