sskaje / mqtt

MQTT Client class
https://sskaje.me/category/MQTT/
MIT License
86 stars 33 forks source link

参数暗示 参数类型好像有问题 #12

Closed yiqing-95 closed 8 years ago

yiqing-95 commented 8 years ago

yii框架中测试时:


E:\yiqing-workspace\my-github\aheadmall\console>yii
PHP Strict Warning 'yii\base\ErrorException' with message 'Declaration of console\controllers\MySubscribeCallback::publish() should be compatible with sskaje\mqtt\MessageHandler::publish(sskaje\mqtt\MQTT $mqtt, ss
kaje\mqtt\Message\PUBLISH $publish_object)'

php5.6 报的错误

我嫌麻烦 直接跑到你基类里面 改掉了 参数的类型暗示: Message\PUBLISH $publish_object =》 $publish_object

你这里的类型暗示 名空间偷懒 不带全部前缀 ^_^ 我不清楚是不是这个原因 MySubscribeCallback 这个类是从你测试文件中 直接拷贝到我的名空间文件去的 ;

sskaje commented 8 years ago

你的 console\controllers\MySubscribeCallback::publish() 声明有问题?

yiqing-95 commented 8 years ago

声明没问题 是phpstorm IDE(你知道 这个是世界上最好的IDE 哈哈)生成的方法桩 。报的是函数参数兼容问题。 这个类也是从你测试目录考过来的:


class MySubscribeCallback extends MessageHandler
{

    /*
    public function publish(MQTT $mqtt, Message\PUBLISH $publish_object)
    {
       //  parent::publish($mqtt, $publish_object); // TODO: Change the autogenerated stub
        printf(
            "\e[32mI got a message\e[0m:(msgid=%d, QoS=%d, dup=%d, topic=%s) \e[32m%s\e[0m\n",
            $publish_object->getMsgID(),
            $publish_object->getQos(),
            $publish_object->getDup(),
            $publish_object->getTopic(),
            $publish_object->getMessage()
        );
    }
    */
   public function publish(MQTT $mqtt, $publish_object)
   {
       // parent::publish($mqtt, $publish_object); // TODO: Change the autogenerated stub

       printf(
           "\e[32mI got a message\e[0m:(msgid=%d, QoS=%d, dup=%d, topic=%s) \e[32m%s\e[0m\n",
           $publish_object->getMsgID(),
           $publish_object->getQos(),
           $publish_object->getDup(),
           $publish_object->getTopic(),
           $publish_object->getMessage()
       );
   }

}
yiqing-95 commented 8 years ago

还有一点 你的composer.json 中好像没有名空间配置:

"autoload": {
        "psr-4": {
            "Dsskaje\\mqtt\\": "mqtt/"
        }
    },

这样不能使用composer 的类加载机制 必须手动实现加载机制 如果用composer 安装的话 这点感觉有点鸡肋 :ghost:

sskaje commented 8 years ago

public function publish(\sskaje\mqtt\MQTT $mqtt, \sskaje\mqtt\Message\PUBLISH $publish_object)

yiqing-95 commented 8 years ago

:kissing: 感谢 使用全额名空间后可以工作了 IDE补全误导我了

还有我犯了个低级错误 一直连接不上是因为端口错误 : $MQTT_SERVER = 'tcp://localhost:1883/';
我一直连到8883 这个安全端口去了 使用的emqqt 做broker 最后看到mqtts 才运行在8883端口