关闭导致php-5.2中的语法错误

时间:2011-06-25 05:22:09

标签: php closures php-5.2

我正在执行以下代码post

preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map(function($v) {return array(trim($v[2]), $v[1]);}, $_matches);

但我收到以下错误:

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in SqlParser.php on line 29

我花了一些时间来解决这个问题,但我无法找到解决方案。

有人可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:2)

除非你使用的是php 5.3,否则你不能使用这样的匿名函数。根据{{​​3}},

  

从PHP 5.3.0开始,也可以   将闭包传递给回调   参数。

您可以使用the php documentation for callbacks代替创建匿名。函数,这将在PHP 5.3之前工作。或者使用GWW的答案,这也应该有用。

否则,如果您有兴趣了解更多关于anon的信息。 PHP 5.3+中的函数,您可以阅读create_function()

答案 1 :(得分:2)

我假设你使用的是低于5.3的PHP版本,它不支持闭包(你在评论中确认了这一点)。下面的代码应该有效。我刚刚将匿名函数转换为普通函数。

function map_cb($v){
    return array(trim($v[2]), $v[1]);
}


preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);
$matches = array_map("map_cb", $_matches);