Declaration of Symfony\Contracts\EventDispatcher\EventDispatcherInterface::dispatch(Symfony\Contracts\EventDispatcher\object $event, string $eventName = NULL) must be compatible with Psr\EventDispatcher\EventDispatcherInterface::dispatch(Psr\EventDispatcher\object $event)
报错什么意思?
Symfony 和 Psr的 dispatch冲突了
报错环境:
php: 7.0.10
fastadmin: thinkphp5.0.24 + bootstrap后台框架
EasyChat: "overtrue/wechat": "~4.2"
报错位置:
使用EasyChat时报错:Factory::openWork($providerConfig)
解决问题:
更换PHP的版本:换成 PHP7.3 不再报错
-------------------------------------------------------记录解决问题的过程,有兴趣可看下-------------------------------------------------------
1.因为是使用EasyChat时报的错误,所以首先找到EasyChat的官网。官网也是这样使用的Factory::openWork($config)
2.使用没有问题,难道是EasyChat的版本问题。然后找到项目下的conposer.json,发现用的是"overtrue/wechat": "~4.2",好像也没什么问题
3.然后,看到conposer.json文件,thinkphp5.0.24要求PHP5.6,接着我切换了5.6的版本试试,结果是连基本语法都已经报错
"require": {
"php": ">=5.6.0",
"topthink/framework": "~5.0.24",
"overtrue/wechat": "~4.2",
"endroid/qr-code": "^1.9",
"topthink/think-captcha": "^1.0",
"mtdowling/cron-expression": "^1.2",
"phpmailer/phpmailer": "~6.0.6",
"karsonzhang/fastadmin-addons": "~1.1.9",
"overtrue/pinyin": "~3.0",
"phpoffice/phpspreadsheet": "^1.2"
},
4.接着,切回PHP7.0,继续猜问题
5.决定从报错位置开始找。分别找到
Symfony\Contracts\EventDispatcher\EventDispatcherInterface::dispatch
Psr\EventDispatcher\EventDispatcherInterface::dispatch
interface EventDispatcherInterface extends PsrEventDispatcherInterface{}
接口这样继承应该没有问题才对
6.最后,查看Symfony和Psr的composer.json文件,终于发现了问题所在
"require": {
"php": ">=7.2.5",
"psr/event-dispatcher": "^1"
},
"require": {
"php": ">=7.2.0"
},
7.解决问题后的感想:thinkphp5.0.24要求PHP5.6,EasyChat要求PHP7.0,其他的却要求更高的。。。这是万万没想到的