Rumah > Artikel > rangka kerja php > Apakah fungsi kaedah make dalam laravel
Dalam laravel, kaedah buat digunakan untuk menghuraikan jenis daripada bekas. Jenis ditakrifkan dalam kod sumber kaedah, jika tiada Kunci berdaftar secara automatik akan membuat instantiate kelas konkrit melalui kelas refleksi.
Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.
Kaedah buat dalam Laravel digunakan untuk menghuraikan jenis daripada bekas ini dan tidak mudah untuk menterjemah ke dalam bahasa Cina. Hasil yang dikembalikan selepas menghuraikan adalah contoh jenis.
Pelajar yang telah membaca kod sumber harus tahu bahawa terdapat kaedah buat dalam kelas IlluminateFoundationApplication dan kelas induknya IlluminateContainerContainer Kemudian apabila melaksanakan baris kod ini dalam index.php,
1 Apabila $kernel = $app->make(IlluminateContractsHttpKernel::class);
, kaedah buat dalam IlluminateFoundationApplication akan dilaksanakan dahulu, jadi mari kita lihat dahulu. (Artikel ini mengambil kelas make Kernel sebagai contoh)
/** * 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方法 }
Baiklah, mari kita pergi langkah demi langkah Pertama, mari kita lihat kaedah getAlias Fungsi kaedah ini adalah untuk kembali alias kelas ini Jika diberi Apa yang keluar adalah nama kelas yang lengkap dan ia telah ditetapkan dalam alias. Jika ia belum ditetapkan, nama kelas itu sendiri dikembalikan lihat kaedah ini, anda boleh var_dump $app dahulu dan bandingkan dengan tatasusunan alias di dalam, penulis rangka kerja memang bijak menulis kaedah ini Sekurang-kurangnya kaedah rekursif ini jarang digunakan dalam pembangunan sebenar saya.
/** * 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]); }
Langkah seterusnya ialah menilai dua tatasusunan DeferredServices dan instance Dalam contoh ini, $kernel = $app->make(IlluminateContractsHttpKernel::class);, hasil penghakiman ialah. false. Oleh itu kaedah loadDeferredProvider tidak dilaksanakan.
Langkah seterusnya ialah memanggil kaedah buat dalam kelas induk IlluminateContainerContainer,
/** * 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方法 }
[Cadangan berkaitan: tutorial video laravel]
Atas ialah kandungan terperinci Apakah fungsi kaedah make dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!