这个功能如何工作?我无法理解究竟发生了什么

时间:2014-01-23 16:14:30

标签: php slim

这是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助手类。

1 个答案:

答案 0 :(得分:0)

这似乎是使用插件策略的单身工厂的一个例子。

API用户声明“当我要求environment对象时,使用函数function ($c) { return Slim\Environment::getInstance() }生成它。”然后,singleton方法会确保API用户只返回environment对象的单个实例。

从机械上讲,singleton方法将闭包与键相关联。封闭程序生成一个单例对象,给定一个匿名函数插件来实际进行实例化。 $value是匿名函数,负责生成对象实例以成为单例的任何需要。 singleton负责确保每次调用实例化一次。

旁注:difference between a closure and an anonymous function对于理解这种方法的作用是有意义的。