4

我在本地运行 PHP 5.3.15(OSX 上的自定义 apache/php/mysql 堆栈),并且有以下代码,它工作得很好:

$my_closure = function($something, $other) use (&$foo, $bar) {
  // watcha doin'? ... stuff.
};

$my_closure('hello', array('one', 'two'));

$my_closure(...);一位同事正在将 MAMP 与 PHP 5.4.x 一起使用,并且在闭包调用 ( )中收到“函数名称必须是字符串”错误。

我可以使用call_user_func()or来解决这个问题call_user_func_array(),但我想知道为什么这段代码不再适用于 5.4.x。我认为这要么是 5.4.x 的变化,要么是 MAMP 的问题(根据我的经验,更有可能!)。

php.net 上有一个相关的错误报告,它讨论了无法像使用闭包一样使用可调用数组。该错误的评论确实证实了我在 5.3 中所做的工作正常,并且还提到了在 5.4 中实现可调用数组功能;也许实现引入了回归错误?任何细节/建议将不胜感激。

是的,我很乐意为团队中的每个人使用 Vagrant 以拥有相同的环境,但可惜,没有骰子。

4

2 回答 2

0

我也在这里尝试了您的代码,它在 PHP5.4 中运行良好。

您是否偶然在 Mamp 配置中启用了使用 PHP5.4 的 eAccelerator?eAccelerator 缓存软件随 PHP5.5 之前的 Mamp for PHP 版本一起提供。我建议像本文中的另一位开发人员那样禁用 eAccelerator 。这篇文章声称 eAccelerator 根本没有跟上 PHP 所经历的所有变化。另一个用户在使用 PHP5.4 和 eAccelerator 时也遇到了同样的问题;看这里。而且,从 PHP5.5 以上版本开始,Mamp 不再包含带有 PHP 的 eAcclerator。

于 2014-11-03T19:21:25.513 回答
0

让您的朋友仔细检查他正在运行 5.4。您的语法对于 5.3 和 5.4 都很好(我敢说 PHP 的任何未来版本)

您可以在此处使用 PHP 5.4 测试您的代码(运行echo phpversion();以确认它确实是 5.4)。如您所见,它不会引发任何错误。

于 2013-09-09T12:22:53.447 回答