【问题标题】:Anonymous function breaking when upgrading PHP升级 PHP 时匿名函数中断
【发布时间】:2015-10-03 03:32:12
【问题描述】:

当我从 PHP 5.3 切换服务器/升级到 5.4 时,以下代码突然中断:

function arrayValRecursive($key, array $arr, $string=false){
    $val = array();
    array_walk_recursive($arr, function($v, $k) use($key, &$val){
        if($k == $key) array_push($val, $v);
    });
    if($string==true){
      return count($val) > 1 ? $val : array_pop($val);
    }
    else {
      return $val;
    }
}

我收到 Parse error: syntax error, unexpected T_FUNCTION 错误,这似乎是由于 array_walk_recursive 行中的匿名函数。

如何以不同的方式编写此函数以避免此问题,为什么在升级 PHP 时会出现此问题?

谢谢

【问题讨论】:

  • 看起来 array_walk_recursive 函数在 php5.4 php.net/manual/en/function.array-walk-recursive.php 中仍然存在。没有必要打破它。但是我可以看到你添加了匿名函数..function ($v,$k)....我认为它需要修改
  • @Exception 那是我不明白的。相同的代码在 5.3 服务器上运行良好,在 5.4 服务器上运行中断。在这一点上,我很高兴任何解决方法只是让它运行
  • 我很久以前从其他地方得到了这个代码sn-p,我自己对匿名函数并不熟悉,这就是为什么我想不出另一种方法来获得相同的结果(假设存在)
  • 您必须使用 5.2。我无法在我的服务器 atm 上复制它。你能运行一个phpinfo并确认版本吗?
  • 也无法使用沙盒进行复制。所以看看你能不能得到特定的版本,这样我就可以完全复制它

标签: php anonymous-function array-walk


【解决方案1】:

据我所知,您目前正在使用 php 5.2。

使用代码<? echo phpinfo(): ?> 运行phpinfo() 将检测版本。从我使用 php 5.2 - 5.5 的测试来看,这只发生在 lambda 函数存在之前的 php 5.2 中。

当然,您已经从我们的 cmets 知道了这一点,这是为未来的访问者准备的。

【讨论】:

  • 无法在我的任何服务器或任何允许您更改 PHP 版本的在线沙箱中进行复制,此外,他在 cmets 中声明他实际上在服务器迁移后使用的是 PHP 5.2
  • 这不是一个很棒的 PHP 沙箱恕我直言,我故意避免使用那个沙箱,因为结果不好。试试phptester.netsandbox.onlinephpfunctions.com
  • 第二个包含所有版本...无论如何@Dagon - 此外,当您使用链接执行时它不会中断,用于确定语法错误的 linting 函数将“use”检测为字符串并不是 lambda 的一部分。当你运行它时,你不会得到任何错误。当悬停红色 X 时很容易看到这一点,它显示的错误与 OP 询问的错误不同
  • 补充一点,当在我知道 PHP 版本的真实服务器上运行它时,它就像一个魅力。干杯
  • 虽然cPanel报错了PHP版本,但是当我手动切换到5.4时,问题解决了。感谢您的帮助。
猜你喜欢
  • 2015-01-27
  • 2013-07-25
  • 2014-09-11
  • 2020-07-21
  • 2011-01-29
  • 1970-01-01
  • 2012-07-10
  • 2020-03-11
  • 2013-05-08
相关资源
最近更新 更多