Я пытаюсь передать третий параметр по ссылке на Phps array_walk_recursive
$field = 'foo'; array_walk_recursive($config, function($value, $key, &$field) { $field = 'bar'; }, $field); echo $field // 'foo'
Почему $field
все еще 'foo'
, хотя он передан функции в качестве ссылки?
Я сам отвечу на него:
Согласно документации php анонимных функций унаследованные переменные замыкания должны быть определены в заголовке функций с использованием ключевого слова, что оставляет мой пример:
function($value, $key) use (&$field) { ... }
Хотя функция обратного вызова наследует параметры, объявленные с use
из своего родителя, что означает из области / функции, в которой она была объявлена (не выполнена).
<?php $field = array('foo'); array_walk_recursive($field, function($value, $key) use(&$field) { $field = 'bar'; }); print_r($field); ?>