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

pat*_*shi 6 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
}
Run Code Online (Sandbox Code Playgroud)

问题

  • 将the $app$idas作为参数传递给函数,并使用 -ing $blogPosts变量有什么区别?

  • 可能$blogPosts也已通过了作为参数的函数?

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

gre*_*ire 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
Run Code Online (Sandbox Code Playgroud)

在这里,我正在使用$ b构建一个函数,并且一旦构建它,我将它用于不必命名的变量,就像命名函数的参数一样.