Задать вопрос
@Sun2790

Как получить переменную из callback php?

$client = new \Binance\Websocket\Spot();

$callbacks = [
    'message' => function ($conn, $msg) {
        echo $msg.PHP_EOL;
    },
    'ping' => function ($conn, $msg) {
        echo "received ping from server".PHP_EOL;
    }
];

# single pair
$client->miniTicker($callbacks, 'btcusdt');

Как вытащить сюда переменную $msg?

Что я только не пробовал. В пределах моих знаний. У меня возвращает в основном null.
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 2
Можно использовать замыкание. Тут фишка в том, что надо использовать в замыкании не обычную строковую переменную, а объект, потому что строковая переменная будет передана в виде копии, и не получится её изменить.
В коде я заменил класс Client на его мок.

class Client {
    public function miniTicker(array $callbacks) {
        foreach ($callbacks as $key => $callback) {
            $conn = 'aaaaa';
            $msg = 'msg-'.$key;
            $callback($conn, $msg);
        }
    }
}

class Message {
    public array $messages = [];

    public function addMessage(string $msg) {
        $this->messages[] = $msg;
    }
}

$message = new Message();

$callbacks = [
    'message' => function ($conn, $msg) use ($message) {
        $message->addMessage($msg);
        
    },
    'ping' => function ($conn, $msg) use ($message) {
        $message->addMessage($msg);
    }
];

$client = new Client();
$client->miniTicker($callbacks);
var_dump($message->messages);


В результате в конце у нас выводятся все сообщения
https://onlinephp.io/?s=tVK7boQwEOyR-IctkDDSkR8gR4...
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Никак не получить, да и смысла в этом нет. Каллбэк может быть вызван в любое время и неоднократно. Работать с сообщением надо прямо в нём.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы