我是匿名函数世界的新手。
$this->app->singleton(VideoServiceInterface::class, function($app) {
statement1;
statement2;
.........
});
我在某处看到了上面的代码片段。我真的不明白 $ app 参数来自何处以及编码器如何将其传递给匿名函数?
答案 0 :(得分:1)
好吧,首先,您需要将匿名函数视为在另一个上下文中执行某些语句的门。
它是一种扭转功能声明 - 可以说 - 。
例如,这是声明/调用函数的传统方法:
// Declare a function .
function foo($parameter)
{
// here we are executing some statements
}
// Calling the function
echo foo();
在匿名函数的情况下,我们在某处调用函数,并将声明函数的职责移交给客户端用户。
例如,您正在编写一个新的软件包,并且在特定的情况下,您不希望将您的软件包作为具体对象执行,从而为客户端用户提供更多权限来声明并执行某些语句适合他的需要。function foo($parameter, $callback)
{
echo $parameter . "\n";
// here we are calling the function
// leaving the user free to declare it
// to suit his needs
$callback($parameter);
}
// here the declaration of the function
echo foo('Yello!', function ($parameter) {
echo substr($parameter, 0, 3);
});
在您的示例中,如果您浏览了属于$this->app->singleton
对象的app
方法的源代码,您将找到一个函数 - 通常称为callback
- 在那里调用某处。
答案 1 :(得分:0)
$app
只是一个参数来访问传递给函数的内容,你可以使用$a
或$b
或者像普通的用户定义函数一样:
$this->app->singleton(VideoServiceInterface::class, function($variable) {
//do something with $variable
});
singleton()
方法接受callable类型的参数,该参数是字符串函数名或匿名函数。
singleton()
方法会将某些内容传递给此函数,该函数可用作示例中的$app
或上面的$variable
。