Замыкание PHP возвращает объект

145
12 мая 2019, 02:00

Почему при использовании анонимной функции я не получаю 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,
       ];
}
Answer 1

Потому что вы не вызываете анонимную функцию, а только объявляете её.

$fn = function() {/**/};

Фактически это создание объекта класса Closure

Если вы хотите вызвать анонимную функцию и получить её результат - то необходимо так и написать в коде.

$res = (function() {/**/})();

Либо через call_user_func либо

$fn = function() {/**/};
$res = $fn();

Либо ещё как, не уверен что вспомнил все возможности вызова функции.

Стоит отдельно подумать, зачем в вашем коде вообще анонимная функция.

'children' => ($with and $object->$with()),

На первый взгляд логика сохранена полностью.

READ ALSO
Заголовок php запросов

Заголовок php запросов

Ребята очень нужна помощьСдают нервы

143
Авторизация в yii2

Авторизация в yii2

у меня вот такая задачаПри регистрации должен выдавать выдавать bearer-токен

165
Не работает отправка post запроса Ajax

Не работает отправка post запроса Ajax

Пытаюсь обработать нажатие кнопки в форме

197
Как вывести число с ведущими нулями?

Как вывести число с ведущими нулями?

Работа обычного инкремента понятна

136