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 Разработчик с нативными функциями, которые работают с массивами. Вы можете использовать их с языковыми конструкциями, которые обычно используют нотацию массива для обхода, а что нет.

Другие вопросы по тегам