使用QuickBooks Online PHP SDK运行示例报类常量不允许数组错误
错误根因
这个致命报错的本质是PHP运行版本和QuickBooks Online PHP SDK 6.0.0的适配要求不匹配:
SDK的src/Core/CoreConstants.php第17行在类内定义了数组类型的类常量。这类写法是PHP 7.0才开始支持的语法,如果当前跑这段示例代码的PHP版本低于7.0,就会直接抛出“数组不能作为类常量”的致命错误。
修复方案
- 优先升级运行环境的PHP版本
QuickBooks Online PHP SDK 6.0.0 要求的最低PHP版本为7.1,你可以先执行php -v查看当前执行示例代码所用的PHP解释器版本,把版本升级到SDK兼容验证过的7.4/8.0/8.1版本后再运行代码。
需要额外注意:很多环境会存在CLI命令行用的PHP版本和Web站点运行的PHP版本不一致的问题,要确认跑示例代码用的解释器和站点实际运行的高版本PHP是同一个,避免版本错位导致的报错。 - 受限于环境无法升级PHP时,换用适配版本的SDK
如果当前业务因为依赖限制,没法把PHP升级到7.1以上,就直接替换当前用的6.0.0版本SDK,换成适配PHP 5.6/7.0环境的4.x系列SDK版本,不要强行在低版本PHP环境下运行高版本SDK。 - 应急临时修改SDK源码(不建议长期使用)
要是急需调试代码又暂时调整不了环境,可以手动改报错的CoreConstants.php文件:把文件里所有数组类型的类常量,从const 常量名 = 数组值的写法,改成public static $常量名 = 数组值的静态类属性写法;同时全局检索SDK源码里所有引用这些常量的位置,把原来的CoreConstants::常量名调用语法改成CoreConstants::$常量名。
这种改法很容易漏改引用位置,而且后续SDK更新会把改动覆盖,只适合应急调试用,不建议长期维护。
内容的提问来源于stack exchange,提问作者mmm
相关产品推荐
相关产品推荐

