Как изменить данные о ссылке, прошедшем массив в закрытии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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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