Когда вы реализуете метод _toString в классе, вы можете преобразовать объект в строку
$string =(string) $object
Есть ли эквивалент для преобразования в массив
$array=(array) $object
Из того, что я протестировал с этим кодом, атрибуты объекта преобразуются в индекс массива, даже если этот объект реализует ArrayAccess.
Я ожидал, что приведение объекта с доступом к массиву приведет к получению массива с теми же значениями, к которым я смог получить доступ с помощью объекта.
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 имеет ожидаемое поведение
Нет, нет магическая функция для приведения объекта в массив.
ArrayObject
реализуется с C и имеет странные специфические поведения.
Реализуйте пользовательский метод asArray
и использовать это.
Других решений пока нет …