如何将值传递给匿名函数?

时间:2016-03-21 01:40:49

标签: php silex

以下方法不起作用。

$dir = '/web/source/htm/arc.php'

// no routing
$app->get('/', function() {
    return ob(__DIR__ . $dir);
});

在JavaScript中,函数可以访问$ dir(当然是JS语法),但在PHP中它似乎不起作用。

我也试过

// no routing
$app->get('/', function($dir) {
    return ob(__DIR__ . $dir);
});

2 个答案:

答案 0 :(得分:4)

在PHP中,函数外部的变量不可访问(superglobal个变量除外)。

为了访问函数范围之外的变量,您必须告诉函数它应该有权访问它。这是使用use关键字完成的:

$dir = '/web/source/htm/arc.php'

// no routing
$app->get('/', function() use ($dir) {
    return ob(__DIR__ . $dir);
});

答案 1 :(得分:1)

匿名函数在PHP中也称为闭包。这与JavaScript闭包类似,只是封闭的变量不是自动创建的。

这可以通过不隐式导入您不需要的变量来节省内存。

您必须使用use关键字明确导入这些变量。

$app->get('/', function() use ($dir) {
    return ob(__DIR__ . $dir);
});

见这里:

http://php.net/manual/en/functions.anonymous.php