将数组元素导入作用域时出现语法错误

时间:2014-02-25 15:30:38

标签: php closures scope

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

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

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

2 个答案:

答案 0 :(得分:2)

$_POST['entity']确实不是变量,它是数组的索引。你不能use那个。想想结果应该是什么样的。这是否意味着您只能访问闭包内的$_POST['entity'],而不能访问$_POST中的其他索引?几乎没有意义。只有$_POST才有可能。但是,$_POST是一个超级全局,它位于范围无处不在。无需use

答案 1 :(得分:1)

$_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);