这是Set Helper
class
public function singleton($key, $value)
{
$this->set($key, function ($c) use ($value) {
static $object;
if (null === $object) {
$object = $value($c);
}
return $object;
});
}
在这个类中,上面提到的函数将被称为
// Default environment
$this->container->singleton('environment', function ($c) {
return \Slim\Environment::getInstance();
});
其中$this->container
代表Set
助手类。
答案 0 :(得分:0)
这似乎是使用插件策略的单身工厂的一个例子。
API用户声明“当我要求environment
对象时,使用函数function ($c) { return Slim\Environment::getInstance() }
生成它。”然后,singleton
方法会确保API用户只返回environment
对象的单个实例。
从机械上讲,singleton
方法将闭包与键相关联。封闭程序生成一个单例对象,给定一个匿名函数插件来实际进行实例化。 $value
是匿名函数,负责生成对象实例以成为单例的任何需要。 singleton
负责确保每次调用实例化一次。
旁注:difference between a closure and an anonymous function对于理解这种方法的作用是有意义的。