2014-12-02 85 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並使用它。