“使用”与将参数传递给控制器​​功能之间的区别

时间:2013-04-06 14:56:25

标签: php closures anonymous-function silex

我没有特定的问题,只是希望加深对Silex正在发生的事情的理解,以及一些新的PHP功能。这是基于Silex文档“使用”页面上的代码示例:

$blogPosts = array(
    1 => array(
        'date'      => '2011-03-29',
        'author'    => 'igorw',
        'title'     => 'Using Silex',
        'body'      => '...',    );

$app->get('/blog/{id}', function (Silex\Application $app, $id) use ($blogPosts) {
    //do stuff
}

问题

  • $app$id作为参数传递给函数,然后使用 -ing $blogPosts变量?

  • $blogPosts也可以作为参数传递给函数吗?

  • 另外,我更常见use ($app)使用 -ing $app和传递参数之间有什么区别?

3 个答案:

答案 0 :(得分:7)

这与silex无关,而且与“一些新的PHP功能”有关。 您正在创建一个匿名函数(也称为闭包),可以使用不同的$app$id值重复多次,但只有相同的$blogPosts值。

<?php
$a = "a";
$b = "b";
$c = function ($d) use ($b) {
    echo $d . "." . $b . PHP_EOL;
};
$b = "c";
$e = function ($d) use ($b) {
    echo $d . "." . $b . PHP_EOL;
};

$c($a); // prints a.b, and not a.c
$e($a); // prints a.c

这里,我正在构建一个带有$ b的函数,一旦构建它,我将它用于变量,而这些变量的命名方式与函数的参数命名方式不同。

答案 1 :(得分:0)

该用法允许将变量从父作用域导入闭包范围。

它将允许函数get()使用从父作用域导入的相应param $ blogPosts来调用闭包。

答案 2 :(得分:0)

也许这使它更加透明

<?php
$a = "a1";
$b = "b1";
$f = function ($x) use ($b) {
    echo $x . $b;
};
$f($a); // prints a1b1

// now let's change values of $a and $b
$a = "a2";
$b = "b2"; //--> won't be used as $b was 'b1' when declaring the function.
$f($a); // prints a2b1
?>