可变分辨率PHP
这是Slim框架的一个片段。我试图理解$c值是如何设置的。我执行了一个错误\u log(),它是一个类型Slim\Helper\Set,它是一个单例可变分辨率PHP,php,oop,inversion-of-control,slim,Php,Oop,Inversion Of Control,Slim,这是Slim框架的一个片段。我试图理解$c值是如何设置的。我执行了一个错误\u log(),它是一个类型Slim\Helper\Set,它是一个单例 public function __construct(array $userSettings = array()) { // Setup IoC container $this->container = new \Slim\Helper\Set(); $this->container['settings'] =
public function __construct(array $userSettings = array())
{
// Setup IoC container
$this->container = new \Slim\Helper\Set();
$this->container['settings'] = array_merge(static::getDefaultSettings(), $userSettings);
// Default environment
$this->container->singleton('environment', function ($c) {
return \Slim\Environment::getInstance();
});
// Default request
$this->container->singleton('request', function ($c) {
return new \Slim\Http\Request($c['environment']);
});
.... snip
}
我在青春痘网站上看到了一个类似的例子
如何设置$c?它不是一个全局变量
谢谢
K让我们来分析一下
$this->container->singleton('environment', function ($c) {
return \Slim\Environment::getInstance();
});
他们在传递两个论点。第一个是字符串environment
,它可能指示函数实例化什么类型的类(我的猜测得到了支持)。第二个参数(其中$c
是)是一个匿名函数
基于Slim\Set
所以你调用了这个函数$value
是一个可调用(函数)。您可以看到在此行中设置了$c
$object = $value($c);
在Slim和Pimple中,$c参数是Pimple容器对象
/**
* Ensure a value or object will remain globally unique
* @param string $key The value or object name
* @param \Closure $value The closure that defines the object
* @return mixed
*/
public function singleton($key, $value)
{
$this->set($key, function ($c) use ($value) {
static $object;
if (null === $object) {
$object = $value($c);
}
return $object;
});
}
$object = $value($c);