In Laravel wird die Make-Methode verwendet, um einen Typ aus dem Container zu analysieren. Der Typ wird im Quellcode definiert. Das Ergebnis, das nach dem Parsen zurückgegeben wird, ist eine Instanz des Typs, wenn die Container-Klasse eine solche aufruft Kein registrierter Schlüssel. Konkrete Klassen werden automatisch durch Reflexionsklassen instanziiert.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.
Die Make-Methode in Laravel wird zum Parsen eines Typs aus dem Container verwendet. Dieser Typ ist im Quellcode definiert und lässt sich nicht einfach ins Chinesische übersetzen. Das nach dem Parsen zurückgegebene Ergebnis ist eine Instanz des Typs.
Schüler, die den Quellcode gelesen haben, sollten wissen, dass es in der IlluminateFoundationApplication-Klasse und ihrer übergeordneten Klasse IlluminateContainerContainer eine Make-Methode gibt. Wenn Sie dann diese Codezeile in index.php ausführen, gilt
1 $kernel = $app-> ; make(IlluminateContractsHttpKernel::class);
, die make-Methode in IlluminateFoundationApplication wird zuerst ausgeführt, also schauen wir uns das zuerst an. (In diesem Artikel wird die Kernel-Klasse als Beispiel verwendet)
/** * Resolve the given type from the container. 从容器当中解析给定的type * * (Overriding Container::make) 覆盖了父类中的make方法 * * @param string $abstract 给定的type * @param array $parameters 指定一些参数 可选项 * @return mixed */ public function make($abstract, array $parameters = []) { $abstract = $this->getAlias($abstract);//调用父类中的getAlias方法 //如果在deferredServices这个数组设置了这个type并且在instances数组中没有设置这个type if (isset($this->deferredServices[$abstract]) && ! isset($this->instances[$abstract])) { $this->loadDeferredProvider($abstract);//那么就执行这个方法:加载被定义为延迟的服务提供者 } return parent::make($abstract, $parameters);//调用父类的make方法 }
Okay, schauen wir uns zunächst die getAlias-Methode an. Die Funktion dieser Methode besteht darin, den Alias dieser Klasse zurückzugeben. Wenn ein vollständiger Klassenname in Aliasen festgelegt wurde, wird der Alias des Klassennamens zurückgegeben. Wenn er nicht festgelegt wurde, wird der Klassenname selbst zurückgegeben. Wenn Sie sich diese Methode ansehen, können Sie var_dump $app Vergleichen Sie es zunächst mit dem darin enthaltenen Aliase-Array. Der Framework-Autor hat diese Methode wirklich clever geschrieben. Zumindest wird diese rekursive Methode in meiner tatsächlichen Entwicklung selten verwendet.
/** * Get the alias for an abstract if available. * * @param string $abstract * @return string * * @throws \LogicException */ public function getAlias($abstract) { if (! isset($this->aliases[$abstract])) { return $abstract; } if ($this->aliases[$abstract] === $abstract) { throw new LogicException("[{$abstract}] is aliased to itself."); } return $this->getAlias($this->aliases[$abstract]); }
Der nächste Schritt besteht darin, die beiden Arrays von deferredServices und Instanzen zu beurteilen. In diesem Beispiel ist $kernel = $app->make(IlluminateContractsHttpKernel::class); das Ergebnis der Beurteilung ist falsch, also die Methode „loadDeferredProvider“. wird nicht ausgeführt.
Der nächste Schritt besteht darin, die make-Methode in der übergeordneten Klasse IlluminateContainerContainer aufzurufen,
/** * Resolve the given type from the container. * * @param string $abstract * @param array $parameters * @return mixed */ public function make($abstract, array $parameters = []) { return $this->resolve($abstract, $parameters);//直接调用resolve方法 }
[Verwandte Empfehlung: Laravel-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonWelche Funktion hat die Make-Methode in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!