casting — php Преобразование объекта, реализующего ArrayAccess, в массив

Когда вы реализуете метод _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 имеет ожидаемое поведение

2

Решение

Нет, нет магическая функция для приведения объекта в массив.

ArrayObject реализуется с C и имеет странные специфические поведения.

Реализуйте пользовательский метод asArray и использовать это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]