После того, как метод со встроенной функцией возвращает, добавить в массив, не работает

#php

#php

Вопрос:

Я новичок в Stack, поэтому, пожалуйста, скажите мне, если я делаю что-то не так в своем сообщении!

Я пытаюсь создать массив с помощью SSH-команд, которые выполняются get.

У меня есть метод со встроенной функцией (как вы можете видеть в моем коде), который возвращает переменную $ total_space в качестве результата.

Теперь то, что я пытаюсь сделать, это при возврате переменной добавить данные в массив команд, но, похоже, это не работает. Я кивал головой почти два часа и все еще не могу понять это.

Я пытался использовать array_push, но он просто возвращает ключ с пустым значением.

Мой код:

 $commands = array();

        SSH::run('df -h --output=size --total | awk 'END {print $1}'', function ($total_space) {
            global $commands;
            return $commands['total_space'] = $total_space;
        } );

        print_r($commands);
  

Я ожидал, что в результате будет выведено значение пары ключей с total_space в качестве ключа и возвращаемым значением. Но он показывает только пустой массив.

Надеюсь, кто-нибудь сможет мне помочь,

С уважением

Комментарии:

1. Может быть, вам следует сделать $commands['total_space'] = SSH::run(..., function($total_space) { return $total_space; }); ? Я действительно не думаю, что правильно понял вашу проблему.

2. Зависит от того, что SSH::run() делает с обратным вызовом, SSH::run() возвращает ли что-то?

Ответ №1:

Вам нужно убедиться, что $commands находится в глобальной области видимости, а не в каком-то определении класса или что-то в этом роде. Вероятно, вы могли бы избежать использования global в этом случае и использовать use вот так:

 $commands = array();

        SSH::run('df -h --output=size --total | awk 'END {print $1}'', function ($total_space) use (amp;$commands) {
            return $commands['total_space'] = $total_space;
        } );

        print_r($commands);
  

Также — вы уверены, что внутренняя анонимная функция будет выполнена до того, как вы попытаетесь ее распечатать?