PHP - назначить анонимную функцию переменной внутри своей собственной функции и использовать ее
Поэтому я пытаюсь сделать что-то вроде этого:
function func() {
$call = function() {
...
};
$call();
}
Но это выдает ошибку, говорящую:
Имя функции должно быть строкой
Я также попытался вызвать функцию следующим образом:
$this->call();
call(); // and like this
И это не работает так же хорошо.
Есть ли причина, по которой я не могу делать то, что делаю?
РЕДАКТИРОВАТЬ
Кажется, это проблема исходного кода, а не в примере, который я написал
Это мой настоящий код:
$data = [...];
$menu_array = [];
$getChildren = function($id) {
$children = [];
foreach ($data as $node) {
if ($id == $node["parent"]) {
array_push($children, $node);
}
}
return empty($children) ? null : $children;
};
$check = function($arr, $dat) {
foreach ($dat as $node) {
$children = $getChildren($node["id"]);
if ($children == null) {
$arr[$node["display_name"]] = $node["model"];
} else {
$arr[$node["display_name"]][] = $children;
$check($children);
}
}
};
$check($menu_array, $data);
Ошибка выдается в этой строке:
$children = $getChildren($node["id"]);
1 ответ
То, что вы хотите сделать здесь, это рекурсия! Проблема в том, что PHP не добавляет автоматически какие-либо переменные из внешней области видимости в область действия функции. В вашем коде $check($children);
переменная $check
на самом деле не определено.
Вы можете исправить это, сказав PHP, что он должен использовать $getChildren
а также $check
переменная вне функции:
$getChildren = function($id) use (&$getChildren) {
...
а также
$check = function($arr, $dat) use (&$check, &$getChildren) {
...
Адаптировано с /questions/30487358/anonimnyie-rekursivnyie-funktsii-php/30487379#30487379