#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);
Также — вы уверены, что внутренняя анонимная функция будет выполнена до того, как вы попытаетесь ее распечатать?