在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex() 的解决,设置为静态匿名函数,且赋值给变量
1、在 PHP 7.4 中报错:Cannot redeclare getFirstSkuIndex()。表示函数 getFirstSkuIndex() 已被定义。PHP不支持重定义已声明的函数。如图1
[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、查看被引入文件的代码实现
function getFirstSkuIndex ($product) { // ... } return getFirstSkuIndex($product);
4、将函数声明为闭包函数,然后赋值给变量,PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。且设置为静态匿名函数。编辑后的被引入文件的代码实现,在重新执行引入的重复文件时,函数 $getFirstSkuIndex 会简单地覆盖之前的声明。不再报错。
$getFirstSkuIndex = static function ($product) { // ... }; return $getFirstSkuIndex($product);
近期评论