ArrayAccess/ArrayObject не работают с такими функциями, как call_user_func_array()
При реализации объекта с использованием ArrayAccess
или же ArrayObject
для некоторых операций это совершенно нормальный массив (например, foreach()
заявление). Другие, однако, не так легко одурачить и все еще жалуются, что это объект:
[E_WARNING] call_user_func_array() expects parameter 2 to be array, object given
Это кажется мне бесцеремонным. Может кто-нибудь объяснить причину этого? Это можно обойти?
Мне нужно это для поддержки внутреннего кода. Требуется массив (передаваемый в качестве параметра call_user_func_array()
), а иногда и модифицирует его. Однако мне нужно отразить любые изменения, внесенные в массив, в новые переменные, поэтому я попытался сделать это через ArrayAccess
объект (подробнее здесь).
2 ответа
Имя функции Thye довольно явно, и описание в документах указывает, почему это требует массива
Решение состоит в том, чтобы обернуть ваш объект в массив
call_user_func_array('callback', array( $myObject));
Вообще говоря, вы не можете использовать ArrayObject
или и ArrayAccess
Разработчик с нативными функциями, которые работают с массивами. Вы можете использовать их с языковыми конструкциями, которые обычно используют нотацию массива для обхода, а что нет.