public static function createFactory($spec = null) { if (is_null($spec) || is_array($spec)) { return new FactoryClosure($spec); } if (is_object($spec)) { $f = new FactoryClosure([]); $f->registerByObject($spec); return $f; } throw new Exception\InvalidSpec(__CLASS__, __METHOD__, $spec); }
/** * ファクトリの登録 * * @param string $name * @param callable $spec */ public function register($name, $spec = null) { if (is_array($name) && $spec === null) { foreach ($name as $k => $v) { $this->register($k, $v); } return $this; } // ログイベントをディスパッチする $this->dispatch('log.notice', ['message' => "{$name} is registered"]); // キャッシュをクリアする $this->_instance_store->clear($name); // Specが生オブジェクトであればキャッシュを登録する if (is_object($spec) && !$spec instanceof \Closure) { $this->_instance_store->set($name, $spec); return $this; } parent::register($name, $spec); return $this; }