Как изменить данные о ссылке, прошедшем массив в закрытииPhp

Кемеровские программисты php общаются здесь
Anonymous
Как изменить данные о ссылке, прошедшем массив в закрытии

Сообщение Anonymous »

У меня есть бибус, который принимает имя фильтра в качестве первого параметра и закрытие в качестве второго параметра. Как это: < /p>

Код: Выделить всё

$this->EventBus->subscribe('FilterTestEvent', function(){/*Do Something*/});
< /code>
Это называется таким: < /p>
$filteredValue = $this->EventBus->filter('FilterTestEvent', $anyValue);
< /code>
Что я хочу сейчас, так это передавать массив в качестве ссылки на закрытие, которое затем изменяется каким -либо образом (здесь: добавление элементов), а затем вернуть что -то как фильтрованное значение: < /p>
$item_to_change = array('e1' => 'v1', 'e2' => 'v2');

$this->EventBus->subscribe('FilterTestEvent', function(&$item){
$item['new'] = 'LoremIpsum';

return true;
});

$filtered = $this->EventBus->filter('FilterTestEvent', $item_to_change);
Теперь я был бы print_r ($ item_to_change) Ожидается выглядеть следующим образом:

Код: Выделить всё

Array
(
[e1] => v1
[e2] => v2
[new] => LoremIpsum
)
< /code>
, но вместо этого он выглядит как исходный массив: < /p>
Array
(
[e1] => v1
[e2] => v2
)
Eventbus Внутренне хранит все закрытия и вызывает их, если это необходимо, через Call_user_func_array () с закрытием в качестве первого аргумента и значения как единственный элемент массива аргументов.>

Подробнее здесь: https://stackoverflow.com/questions/207 ... in-closure

Вернуться в «Php»