8

我没有具体的问题,只是想加深我对 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将and$id作为参数传递给函数和使用-ing$blogPosts变量之间有什么区别?

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

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

3 回答 3

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 构建一个函数,一旦它被构建,我将它与不必以与函数参数命名相同的方式命名的变量一起使用。

于 2013-04-06T15:11:22.807 回答
1

也许这使它更透明

<?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
?>
于 2020-07-06T20:57:38.290 回答
0

使用允许将变量从父作用域导入闭包作用域。

它将允许函数 get() 使用从父范围导入的适当参数 $blogPosts 调用您的闭包。

于 2013-04-06T15:39:12.257 回答