У меня возникли проблемы с PHP NATS. Я получаю и распечатываю значения тела сообщения. Все работает нормально. Просто вернуть результат — это проблема. Вот код
function connect(){
require_once __DIR__ . "/../../vendor/autoload.php";
$connectionOptions = new \Nats\ConnectionOptions();
$connectionOptions->setHost('localhost')->setPort(4222);
$c = new Nats\Connection($connectionOptions);
$c->connect();
$c->request('sayhello', 'Marty McFly', function ($response) {
echo $response->getBody();
return $response->getBody();
});
}
echo
работает и печатает значения, в то время как return ничего не возвращает, если я использую вот так.
$res = connect():
print_r($res);
Вы повторяете область действия анонимной функции и возвращаетесь из области действия connect()
функция.
Один из подходов, который вы можете использовать, это обратный вызов, вы можете заставить свою функцию принимать Closure в качестве аргумента и запускать его изнутри. connect()
с результатом в качестве аргумента:
function connect(\Closure $callback){
require_once __DIR__ . "/../../vendor/autoload.php";
$connectionOptions = new \Nats\ConnectionOptions();
$connectionOptions->setHost('localhost')->setPort(4222);
$c = new Nats\Connection($connectionOptions);
$c->connect();
$c->request('sayhello', 'Marty McFly', function ($response) use ($callback) {
echo $response->getBody();
$callback(response->getBody());
});
}
И вы бы использовали его следующим образом:
connect(function ($result) {
// here you've got an access to the $response->getBody() from connect function
});
Других решений пока нет …