Rumah > rangka kerja php > Laravel > Apakah fungsi kaedah make dalam laravel

Apakah fungsi kaedah make dalam laravel

WBOY
Lepaskan: 2022-02-24 15:25:12
asal
3030 orang telah melayarinya

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.

Apakah fungsi kaedah make dalam laravel

Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.

Apakah peranan kaedah buat dalam laravel

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方法
     }
Salin selepas log masuk

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]);
     }
Salin selepas log masuk

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方法
 }
Salin selepas log masuk

[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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan