报错内容
问题原因
在 PHP 7.2 中出现的错误 “Return value of EasyWeChat\BasicService\Jssdk\Client::getTicket() must be of the type array, null returned” 而在 PHP 8.0 中却能正常执行,这可能是由于 PHP 7.2 和 PHP 8.0 在类型声明和错误处理方面的差异所导致。
-
类型声明的严格性: 在 PHP 7.2 中,函数的返回类型声明是相对严格的。如果函数声明了返回特定类型(在这个例子中是数组),但实际上返回了不匹配的类型(如
null
),那么 PHP 将抛出一个类型错误。这就是为什么在 PHP 7.2 中你会看到这个错误。 -
PHP 8.0 的类型系统改进: 在 PHP 8.0 中,类型系统有了显著的改进,特别是在处理 null 和类型不匹配的情况时更加灵活。PHP 8.0 引入了联合类型和 null 安全运算符等特性,这可能会影响函数如何处理返回类型和 null 值。
-
错误处理的差异: PHP 8.0 在错误处理方面也做了改进,它可能在遇到某些类型不匹配时不再抛出错误,而是进行了更加灵活的处理。
要解决 PHP 7.2 中的问题,你可以采取以下措施:
-
检查
getTicket
方法的实现: 查看 EasyWeChatgetTicket
方法的代码,确保在所有情况下都返回一个数组。如果有可能返回 null,你可以修改代码以返回一个空数组或进行适当的错误处理。 -
更新 EasyWeChat 版本: 如果你使用的是旧版本的 EasyWeChat,考虑升级到最新版本。新版本可能已经修复了这个问题。
-
错误处理: 在调用
getTicket
方法的地方添加错误处理逻辑,以防返回 null。 -
考虑升级 PHP 版本: 如果适用,考虑升级到 PHP 8.0 或更高版本,以利用改进的类型系统和错误处理。
修复方法
替换 /vendor/overtrue/wechat/src/BasicService/Jssdk/Client.php 里的 getTicket 方法
public function getTicket(bool $refresh = false, <