【问题标题】:Syntax error when importing array element into scope将数组元素导入作用域时出现语法错误
【发布时间】:2014-03-27 22:44:17
【问题描述】:

我正在尝试借助 use 关键字将变量导入到我的闭包中。但是解析器抱怨括号。要将变量导入范围时是否不允许使用数组元素?我是否只允许导入完整变量(即$_POST 本身)?

$data = array_map(function($key, $value) use ($tv, $_POST['entity'] as $entity) {
...
}, $keys, $values);

错误是:解析错误:语法错误,意外'[',期待','或')'

【问题讨论】:

  • $_POST 无论如何都是一个超全球...
  • @NiettheDarkAbsol D'oh!
  • 很遗憾,function ... use 的语法仍然没有正式记录。
  • @AmalMurali 我(ab)一直在使用它。我更喜欢array_mapforeach :)
  • @AmalMurali:这里有记录:php.net/manual/en/functions.anonymous.phpClosures may also inherit variables from the parent scope. Any such variables must be passed to the use language construct. 它可能没有很好地记录,但它就在那里。

标签: php closures scope


【解决方案1】:

$_POST['entity'] 确实不是一个变量,它是一个数组的索引。你不能use那个。想想结果应该是怎样的。这是否意味着您只能访问闭包内的$_POST['entity'],而不能访问$_POST 中的其他索引?几乎没有意义。只是$_POST 是可能的。然而,$_POST 一开始就是一个超全局,它在任何地方的范围内。不用use它。

【讨论】:

    【解决方案2】:
    $_POST['entity'] as $entity
    

    你不能那样做。你只能use变量,不能数组索引。

    最好的做法是将$_POST['entity'] 保存到一个变量中,然后将其添加到use 语句中。

    $entity = $_POST['entity'];
    $data = array_map(function($key, $value) use ($tv, $entity) {
        //...
    }, $keys, $values);
    

    问题是,$_POST 实际上是一个superglobal,这意味着它存在于任何范围内。

    $data = array_map(function($key, $value) use ($tv) {
        $entity = $_POST['entity'];
        //...
    }, $keys, $values);
    

    【讨论】:

    • 两个都是很好的答案,我无法决定接受哪一个
    • @silkfire:哪一个对你帮助更大。如果是另一个,就没有难过的感觉;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2019-05-24
    • 2013-10-28
    相关资源
    最近更新 更多