没有不值得去解决的问题,也没有不值得去学习的技术!

在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex() 的解决,设置为静态匿名函数,且赋值给变量

在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex()。表示函数 getFirstSkuIndex() 已被定义。PHP不支持重定义已声明的函数。

作者:

在

, ,

1、在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex()。表示函数 getFirstSkuIndex() 已被定义。PHP不支持重定义已声明的函数。如图1

在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex()。表示函数 getFirstSkuIndex() 已被定义。PHP不支持重定义已声明的函数。
图1
Plaintext

[2023-01-09 10:28:00] local.ERROR: Cannot redeclare getFirstSkuIndex() (previously declared in E:\wwwroot\object\storage\framework\views\f7c14c1d27c4ea3f4d0e1c60a5009bfe9a47c438.php:7) {
    "exception": "[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 64): Cannot redeclare getFirstSkuIndex() (previously declared in E:\\wwwroot\\object\\storage\\framework\\views\\f7c14c1d27c4ea3f4d0e1c60a5009bfe9a47c438.php:7) at E:\\wwwroot\\object\\storage\\framework\\views\\f7c14c1d27c4ea3f4d0e1c60a5009bfe9a47c438.php:7)
[stacktrace]
#0 {main}
"
} 

2、参考:https://www.shuijingwanwq.com/2022/11/14/7149/ ,现在是因为同一个文件被重复引入(业务上允许重新引入)。进而导致同一个函数被重复定义。

3、查看被引入文件的代码实现

PHP


function getFirstSkuIndex ($product) {
  // ...
}

return getFirstSkuIndex($product);

4、将函数声明为闭包函数,然后赋值给变量,PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。且设置为静态匿名函数。编辑后的被引入文件的代码实现,在重新执行引入的重复文件时,函数 $getFirstSkuIndex 会简单地覆盖之前的声明。不再报错。

PHP


$getFirstSkuIndex = static function ($product) {
  // ...
};

return $getFirstSkuIndex($product);

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系