Smarty迁移报错:SmartyCompilerException::$line类型需为int
问题解决:SmartyCompilerException::$line类型不兼容PHP8.1错误
问题根源
PHP 8.1开始严格执行类属性的继承类型匹配规则,父类Exception的$line属性是int类型,但Smarty 3.1.48版本的SmartyCompilerException类中,$line属性未声明为int类型(或声明了不兼容的类型),触发类型不匹配的致命错误。
解决方案
方案1:直接修改Smarty核心文件(快速临时修复)
- 打开报错文件
/xxx/libs/sysplugins/smartycompilerexception.php - 找到第8行附近的
$line属性声明,将其明确指定为int类型:
class SmartyCompilerException extends Exception { public int $line; // 保留文件中其他原有代码 }
方案2:升级Smarty到兼容PHP8.1的版本(推荐长期方案)
- 升级Smarty 3.1分支到3.1.49及以上版本(该版本已修复PHP8.1的类型兼容问题),无需大幅改动原有代码,同属3.1分支兼容性较好。
- 若考虑长期维护,也可升级到Smarty 4.x版本,但需注意SmartyBC的适配情况,建议先在测试环境验证。
内容的提问来源于stack exchange,提问作者goldwing
相关产品推荐
相关产品推荐

