【发布时间】:2015-01-30 12:02:14
【问题描述】:
当你在一个类上实现 _toString 方法时,你可以将对象转换成字符串
$string =(string) $object
有没有等价的转换成数组
$array=(array) $object
根据我的测试,使用此代码,即使此对象实现 ArrayAccess,对象的属性也会转换为数组的索引。
我希望通过数组访问来转换一个对象,我将获得一个与我可以使用该对象访问的值相同的数组
public class 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 类具有我预期的行为
【问题讨论】:
-
要么从ArrayObject派生,要么重用getArrayCopy;或者通过返回 $values 属性来重新实现它。投射不起作用,因为没有
__toArray处理。 -
public function MyObject implements ArrayAccess{class MyObject implements ArrayAccess { ...。
标签: php casting type-conversion arrayaccess