Jadual Kandungan
Apakah teras laravel
Rumah rangka kerja php Laravel Apakah inti laravel

Apakah inti laravel

Mar 11, 2022 pm 04:34 PM
laravel

Inti laravel ialah bekas perkhidmatan, iaitu bekas IOC. Bekas menyediakan satu siri perkhidmatan yang diperlukan dalam keseluruhan rangka kerja, termasuk suntikan kebergantungan dan penyongsangan kawalan adalah prinsip reka bentuk dalam pengaturcaraan berorientasikan objek yang boleh digunakan untuk mengurangkan gandingan antara kod komputer.

Apakah inti laravel

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

Apakah teras laravel

Bekas perkhidmatan, juga dipanggil bekas IOC, sebenarnya mengandungi dua bahagian: suntikan kebergantungan (DI) dan penyongsangan kawalan (IOC), dan merupakan teras sebenar laravel. Pelbagai modul berfungsi lain seperti Route (perutean), Eloquent ORM (komponen ORM pangkalan data), Permintaan dan Respons (permintaan dan tindak balas), dan lain-lain, sebenarnya disediakan oleh modul kelas yang tiada kaitan dengan teras kelas ini dari Dari instantiasi hingga penggunaan akhir oleh anda, bekas perkhidmatan laravel sebenarnya bertanggungjawab untuknya. Konsep bekas perkhidmatan sukar untuk dijelaskan dengan jelas Ia hanya boleh dijelaskan langkah demi langkah dari sejarah bekas perkhidmatan

Bekas ini menyediakan satu siri perkhidmatan yang diperlukan dalam keseluruhan rangka kerja.

Kisah kelahiran kontena IoC - Zaman Batu (mod asal)

Kami menganggap "Superman" sebagai kelas,

kelas Superman {}

Kita boleh bayangkan bahawa seorang superman mesti mempunyai sekurang-kurangnya satu kuasa besar apabila dia dilahirkan. Kuasa besar ini juga boleh disarikan kepada objek. Kuasa besar mesti mempunyai pelbagai atribut dan kaedah (operasi) Anda boleh bayangkan ini secara bebas, tetapi buat masa ini kami akan mentakrifkan secara kasar "kuasa besar" yang hanya mempunyai atribut, kami akan mengembangkannya kemudian:

class Power {
    /**
     * 能力值
     */
    protected $ability;
    /**
     * 能力范围或距离
     */
    protected $range;
    public function __construct($ability, $range)
    {
        $this->ability = $ability;
        $this->range = $range;
    }
}
Salin selepas log masuk

Pada masa ini kita kembali dan mengubah suai kelas "Superman" sebelum ini supaya "Superman" diberi kuasa super apabila ia dicipta:

class Superman
{
    protected $power;
    public function __construct()
    {
        $this->power = new Power(999, 100);
    }
}
Salin selepas log masuk

Dalam kes ini, apabila kita mencipta "Superman" "Instance, contoh "superpower" juga dicipta. Walau bagaimanapun, kita telah melihat bahawa terdapat pergantungan yang tidak dapat dielakkan antara "superman" dan "superpower".

Apa yang dipanggil "pergantungan" bermaksud "jika saya bergantung pada anda, tidak akan ada saya tanpa anda."

Dalam projek yang melaksanakan pengaturcaraan berorientasikan objek, kebergantungan sedemikian boleh dilihat di mana-mana sahaja. Sebilangan kecil pergantungan tidak mempunyai kesan yang terlalu intuitif Apabila kita membongkar contoh ini secara beransur-ansur, kita secara beransur-ansur akan menyedari betapa mimpi buruknya apabila pergantungan itu mencapai tahap tertentu. Sudah tentu, saya juga secara semula jadi akan menerangkan cara menyelesaikan masalah itu.

Dalam contoh sebelumnya, kelas kuasa besar ialah kuasa besar tertentu selepas instantiasi, tetapi kita tahu bahawa kuasa besar Superman dipelbagaikan, dan setiap kuasa besar mempunyai kaedah dan sifat tersendiri Perbezaannya tidak boleh dihuraikan sepenuhnya oleh satu jenis. Mari kita buat pengubahsuaian sekarang. Mari kita andaikan bahawa Superman boleh mempunyai kuasa besar berikut:

Terbang, atribut ialah: kelajuan penerbangan, tempoh penerbangan

brute force, atribut ialah: nilai kekuatan

Bom tenaga, atribut termasuk: nilai kerosakan, jarak menembak, bilangan pukulan serentak

Kami telah mencipta kelas berikut:

class Flight
{
    protected $speed;
    protected $holdtime;
    public function __construct($speed, $holdtime) {}
}
class Force
{
    protected $force;
    public function __construct($force) {}
}
class Shot
{
    protected $atk;
    protected $range;
    protected $limit;
    public function __construct($atk, $range, $limit) {}
}
Salin selepas log masuk

Baiklah, sekarang Superman kami agak " Sibuk ". Apabila Superman dimulakan, adakah kita akan membuat instantiat kuasa-kuasa besarnya seperti yang diperlukan secara kasarnya seperti berikut:

class Superman
{
    protected $power;
    public function __construct()
    {
        $this->power = new Fight(9, 100);
        // $this->power = new Force(45);
        // $this->power = new Shot(99, 50, 2);
        /*
        $this->power = array(
            new Force(45),
            new Shot(99, 50, 2)
        );
        */
    }
}
Salin selepas log masuk

Kita perlu membuat instantiat secara manual dalam pembina (atau kaedah lain) Kelas yang diperlukan oleh siri ini bukan? baik. Ia boleh difikirkan bahawa jika keperluan berubah (raksasa yang berbeza berleluasa di bumi), lebih banyak kuasa besar baru yang disasarkan diperlukan, atau kaedah kuasa besar perlu diubah, kita mesti mencipta semula Superman. Dalam erti kata lain, sambil menukar kuasa besar saya, saya juga perlu mencipta superman baru. Kecekapan terlalu rendah! Dunia telah pun musnah sebelum Superman baharu dicipta.

Pada masa ini, orang yang mempunyai idea berfikir: Kenapa tidak boleh jadi begini? Kebolehan Superman boleh diubah pada bila-bila masa, hanya dengan menambah atau mengemas kini cip atau peranti lain (Iron Man terlintas di fikiran). Dalam kes ini, tidak perlu bermula semula.

Kisah Kelahiran Kontena IoC - Zaman Gangsa (Mod Kilang)

Kita tidak seharusnya secara manual mengukuhkan tingkah laku permulaan "kuasa besar" beliau dalam kelas "Superman", tetapi sebaliknya The luar bertanggungjawab untuk mencipta modul kuasa besar, peranti atau cip dari luar (kami akan merujuknya sebagai "modul" mulai sekarang), dan menanamnya ke dalam antara muka tertentu dalam badan Superman Antara muka ini diberikan, selagi ini ". modul" memuaskan Peranti dalam antara muka ini boleh digunakan oleh Superman untuk meningkatkan dan meningkatkan keupayaan Superman tertentu. Tingkah laku yang menjadikan dunia luar bertanggungjawab terhadap keperluan pergantungannya boleh dipanggil "Penyongsangan Kawalan (IoC)".

Mod kilang, seperti namanya, ialah mod pembangunan di mana semua kejadian perkara luaran yang bergantung kepada kelas boleh dibuat oleh satu atau lebih "kilang", iaitu "mod kilang".

Untuk membuat modul kuasa besar untuk Superman, kami mencipta kilang yang boleh membuat pelbagai modul melalui hanya satu kaedah:

class SuperModuleFactory
{
    public function makeModule($moduleName, $options)
    {
        switch ($moduleName) {
            case 'Fight':     return new Fight($options[0], $options[1]);
            case 'Force':     return new Force($options[0]);
            case 'Shot':     return new Shot($options[0], $options[1], $options[2]);
        }
    }
}
Salin selepas log masuk

这时候,超人 创建之初就可以使用这个工厂!

class Superman
{
    protected $power;
    public function __construct()
    {
        // 初始化工厂
        $factory = new SuperModuleFactory;
        // 通过工厂提供的方法制造需要的模块
        $this->power = $factory->makeModule('Fight', [9, 100]);
        // $this->power = $factory->makeModule('Force', [45]);
        // $this->power = $factory->makeModule('Shot', [99, 50, 2]);
        /*
        $this->power = array(
            $factory->makeModule('Force', [45]),
            $factory->makeModule('Shot', [99, 50, 2])
        );
        */
    }
}
Salin selepas log masuk

可以看得出,我们不再需要在超人初始化之初,去初始化许多第三方类,只需初始化一个工厂类,即可满足需求。但这样似乎和以前区别不大,只是没有那么多 new 关键字。其实我们稍微改造一下这个类,你就明白,工厂类的真正意义和价值了。

class Superman
{
    protected $power;
    public function __construct(array $modules)
    {
        // 初始化工厂
        $factory = new SuperModuleFactory;
        // 通过工厂提供的方法制造需要的模块
        foreach ($modules as $moduleName => $moduleOptions) {
            $this->power[] = $factory->makeModule($moduleName, $moduleOptions);
        }
    }
}
// 创建超人
$superman = new Superman([
    'Fight' => [9, 100],
    'Shot' => [99, 50, 2]
    ]);
Salin selepas log masuk

现在修改的结果令人满意。现在,“超人” 的创建不再依赖任何一个 “超能力” 的类,我们如若修改了或者增加了新的超能力,只需要针对修改 SuperModuleFactory 即可。

【相关推荐:laravel视频教程

Atas ialah kandungan terperinci Apakah inti laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mendapatkan kod pengembalian semasa menghantar e -mel gagal di Laravel? Bagaimana untuk mendapatkan kod pengembalian semasa menghantar e -mel gagal di Laravel? Apr 01, 2025 pm 02:45 PM

Kaedah untuk mendapatkan kod kembali apabila menghantar e -mel Laravel gagal. Apabila menggunakan Laravel untuk membangunkan aplikasi, anda sering menghadapi situasi di mana anda perlu menghantar kod pengesahan. Dan pada hakikatnya ...

Tugas Jadual Laravel tidak dilaksanakan: Apa yang harus saya lakukan jika tugas itu tidak berjalan selepas Jadual: Jalankan Perintah? Tugas Jadual Laravel tidak dilaksanakan: Apa yang harus saya lakukan jika tugas itu tidak berjalan selepas Jadual: Jalankan Perintah? Mar 31, 2025 pm 11:24 PM

Tugas Jadual Laravel menjalankan penyelesaian masalah yang tidak responsif semasa menggunakan penjadualan tugas jadual Laravel, banyak pemaju akan menghadapi masalah ini: Jadual: Jalankan ...

Di Laravel, bagaimana menangani situasi di mana kod pengesahan gagal dihantar melalui e -mel? Di Laravel, bagaimana menangani situasi di mana kod pengesahan gagal dihantar melalui e -mel? Mar 31, 2025 pm 11:48 PM

Kaedah mengendalikan kegagalan e -mel Laravel untuk menghantar kod pengesahan adalah menggunakan Laravel ...

Bagaimana untuk melaksanakan fungsi jadual tersuai untuk mengklik untuk menambah data dalam admin dcat? Bagaimana untuk melaksanakan fungsi jadual tersuai untuk mengklik untuk menambah data dalam admin dcat? Apr 01, 2025 am 07:09 AM

Cara melaksanakan fungsi jadual klik tersuai untuk menambah data dalam dcatadmin (laravel-admin) semasa menggunakan dcat ...

Laravel - Pelayan Buang Laravel - Pelayan Buang Aug 27, 2024 am 10:51 AM

Laravel - Dump Server - Laravel dump server datang dengan versi Laravel 5.7. Versi sebelumnya tidak termasuk pelayan dump. Pelayan dump akan menjadi kebergantungan pembangunan dalam fail komposer laravel/laravel.

Perkongsian Sambungan Laravel Redis: Mengapa kaedah pilih mempengaruhi sambungan lain? Perkongsian Sambungan Laravel Redis: Mengapa kaedah pilih mempengaruhi sambungan lain? Apr 01, 2025 am 07:45 AM

Kesan perkongsian sambungan Redis dalam rangka kerja Laravel dan pilih kaedah apabila menggunakan Rangka Kerja Laravel dan Redis, pemaju mungkin menghadapi masalah: melalui konfigurasi ...

Laravel Multi-Tenant Extension Stancl/Tenancy: Bagaimana Menyesuaikan Alamat Hos Sambungan Pangkalan Data Penyewa? Laravel Multi-Tenant Extension Stancl/Tenancy: Bagaimana Menyesuaikan Alamat Hos Sambungan Pangkalan Data Penyewa? Apr 01, 2025 am 09:09 AM

Sambungan pangkalan data penyewa tersuai dalam pakej lanjutan multi-penyewa Larave Stancl/penyewaan ketika membina aplikasi multi-penyewa menggunakan pakej lanjutan multi-penyewa Larave Stancl/penyewaan, ...

Laravel - URL Tindakan Laravel - URL Tindakan Aug 27, 2024 am 10:51 AM

Laravel - URL Tindakan - Laravel 5.7 memperkenalkan ciri baharu yang dipanggil "URL tindakan boleh panggil". Ciri ini serupa dengan yang terdapat dalam Laravel 5.6 yang menerima kaedah rentetan dalam tindakan. Tujuan utama sintaks baharu memperkenalkan Laravel 5.7 adalah untuk mengarahkanl

See all articles