2014-12-02 2 views
2

При реализации метода _toString на классе, вы можете преобразовать объект в строкуPHP Преобразование объекта, реализующий ArrayAccess в массиве

$string =(string) $object 

Есть ли эквивалент для преобразования в массиве

$array=(array) $object 

Из того, что я протестировал, с этим кодом атрибуты объекта преобразования преобразуются в индекс массива, даже если этот объект реализует ArrayAccess.

Я ожидал, что отливка объекта доступа к массиву, я бы получить массив 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

+0

'public function MyObject реализует ArrayAccess {' <- это недопустимый синтаксис PHP. Вы хотите 'class MyObject реализует ArrayAccess {...'. – faintsignal

ответ

1

Нет, нет magic function, чтобы отличить объект как массив.

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

Внесите свой собственный метод asArray и используйте его.

Смежные вопросы