【问题标题】:Return in function not working返回功能不起作用
【发布时间】:2017-05-09 08:17:20
【问题描述】:

我正在使用 phpMQTT 订阅来自 MQTT 代理的数据。我已经根据他们的基本实现成功地设置了一个 pub/sub 例程。我可以在 procmsg() 函数中很好地回显信息。

但是,我需要获取收到的数据并将其用于运行一些数据库操作等。我似乎无法访问在 procmsg() 函数之外收到的主题或消息。如下使用 return 似乎没有任何结果。

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

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

显然我做错了什么 - 但是我如何获得这些值以便我可以在 procmsg() 之外使用它们?非常感谢。

【问题讨论】:

  • 尝试使用print_r(procmsg($topic,$msg));
  • 打开function procmsg($topic,$msg){时还有一个;分号
  • 感谢 Antonis - print_r 没有产生任何结果,分号现在已被删除,但没有任何区别。
  • 您是否启用了error reporting 以查看是否出现任何错误?

标签: php function return phpmqtt


【解决方案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){ ... }

所以在 while($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);
}

对不起我的英语,希望对您有所帮助!

【讨论】:

  • 嗨乔亚,谢谢!我现在在 procmsg() 中运行整个数据库循环等。我不确定这是绝对最好的方法,但它现在有效。真的没有办法在 procmsg 函数之外简单地使用 $msg 和 $topic 的值吗?
  • 嗨!,我能想到的唯一方法是将这些值放入全局变量中,但我也不建议这样做,另一种方法是在缓冲区中思考(也是全局的,一个简单的数组,你可以按到达顺序存储两个值)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多