Почему при использовании анонимной функции я не получаю true/false, как ожидаю, а вместо этого получаю объект класса Closure?
foreach ($objects as $object)
{
$data[] = [
'id' => $currBranch.$object->id,
'text' => $object->name,
'parent' => $model::$parent.$parent,
'children' => function () use ($object, $with){
if ($with){
return $object->$with() ? true : false;
} else {
return false;
}
},
'currBranch' => $currBranch,
'childBranch' => $object::$child,
'childModel' => $object::$childModel,
];
}
Потому что вы не вызываете анонимную функцию, а только объявляете её.
$fn = function() {/**/};
Фактически это создание объекта класса Closure
Если вы хотите вызвать анонимную функцию и получить её результат - то необходимо так и написать в коде.
$res = (function() {/**/})();
Либо через call_user_func
либо
$fn = function() {/**/};
$res = $fn();
Либо ещё как, не уверен что вспомнил все возможности вызова функции.
Стоит отдельно подумать, зачем в вашем коде вообще анонимная функция.
'children' => ($with and $object->$with()),
На первый взгляд логика сохранена полностью.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок