Возврат в функцию не работает

Я подписываюсь на данные брокера MQTT с phpMQTT. Я успешно настроил подпрограмму pub / sub на основе их базовой реализации. Я могу точно отобразить информацию внутри функции procmsg().

Однако мне нужно взять полученные данные и использовать их для выполнения нескольких операций с базой данных и тому подобного. Я не могу получить доступ к теме или сообщения, полученные за пределами функции procmsg(). Использование return как показано ниже ничего не дает.

<?php
function procmsg($topic, $msg){
  $value = $msg * 10;
  return $value;
}

echo procmsg($topic, $msg);
echo $value;
?>

Очевидно, что я делаю что-то не так - но как мне получить значения, чтобы я мог использовать их вне procmsg()? Большое спасибо.

1 ответ

Решение

Я не знаю об этой библиотеке, но в этом коде https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php можно увидеть, как это работает.

в:

$topics['edafdff398fb22847a2f98a15ca3186e/#'] = array("qos"=>0, "function"=>"procmsg");

вы говорите, что тема "edafdff398fb22847a2f98a15ca3186e/#" будет иметь качество обслуживания (qos) = 0 и "событие" с именем 'procmsg'. Вот почему вы позже написали это

function procmsg($topic,$msg){ ... }

поэтому в то время как ($mqtt->proc()) эта функция будет каждый раз проверять, есть ли новое сообщение (строка 332 вызывает функцию сообщения, а затем это вызывает procmsg из исходного кода)

вот почему вы не можете вызвать в своем коде procmsg

другими словами, возможно, внутри procmsg вы можете вызвать функции для обработки сообщения ej:

function procmsg($topic,$msg){ 
    $value = $msg * 10;
    doStuffWithDataAndDatabase($value);
}

Обратите внимание, что вы можете изменить имя функции просто ej:

$topics['edafdff398fb22847a2f98a15ca3186e/#'] = array("qos"=>0, "function"=>"onMessage");

а потом:

function onMessage($topic,$msg){ 
    $value = $msg * 10;
    doStuffWithDataAndDatabase($value);
}

Извините за мой английский, надеюсь, это поможет!

Другие вопросы по тегам