cari
Rumahpembangunan bahagian belakangtutorial phpCara Membina Bekas Suntikan Ketergantungan Anda Sendiri

Artikel ini membincangkan bagaimana untuk membina pakej PHP Suntikan Ketergantungan (Di Container) yang mudah. Semua kod dalam artikel itu, termasuk anotasi PHPDOC dan ujian unit (liputan kod 100%), telah dimuat naik ke repositori GitHub dan disenaraikan di Packagist.

How to Build Your Own Dependency Injection Container

Mata utama:

    Bangunan di bekas membantu pemaju memahami prinsip asas suntikan ketergantungan dan mekanisme kerja bekas.
  • bekas di dalam mempunyai dua fungsi utama: "Suntikan Ketergantungan" dan "Container". Ia perlu dapat memberi instantiate dan memasukkan perkhidmatan menggunakan suntikan pembina atau kaedah suntikan setter.
  • bekas suntikan ketergantungan Symfony boleh digunakan sebagai rujukan untuk membuat bekas tersuai. Ia membahagikan konfigurasi kontena ke dalam parameter dan perkhidmatan, yang membolehkan penyimpanan kunci aplikasi yang selamat.
  • Membuat bekas DI melibatkan membuat direktori projek, membuat fail
  • , dan melaksanakan antara muka interoperabilitas kontena. Ia juga melibatkan penciptaan dan kelas rujukan. composer.json
  • Kelas kontena perlu mengandungi kaedah untuk mendapatkan semula perkhidmatan, memeriksa sama ada perkhidmatan telah ditakrifkan, parameter parsing, dan memulakan perkhidmatan. Ia juga harus mempunyai mekanisme perlindungan untuk mencegah rujukan bulat.

Rancang bekas suntikan ketergantungan kami

Pertama, kita membahagikan "bekas suntikan ketergantungan" menjadi dua peranan: "suntikan ketergantungan" dan "bekas".

Dua kaedah suntikan ketergantungan yang paling biasa digunakan adalah suntikan pembina dan suntikan setter, iaitu, lulus kebergantungan kelas melalui parameter pembina atau panggilan kaedah. Sekiranya bekas kami dapat memberi instantiate dan memasukkan perkhidmatan, ia perlu dapat melaksanakan kedua -dua operasi.

Untuk menjadi bekas, ia mesti dapat menyimpan dan mengambil contoh perkhidmatan. Ini adalah tugas yang agak mudah berbanding dengan mewujudkan perkhidmatan, tetapi ia masih patut dipertimbangkan. Pakej

menyediakan antara muka bahawa satu set bekas boleh dilaksanakan. Antara muka utama ialah container-interop, yang mentakrifkan dua kaedah: satu untuk mendapatkan perkhidmatan dan yang lain untuk menguji sama ada perkhidmatan itu ditakrifkan. ContainerInterface

interface ContainerInterface
{
    public function get($id);
    public function has($id);
}

Ketahui bekas suntikan ketergantungan lain

Suntikan Suntikan Ketergantungan Symfony membolehkan kami menentukan perkhidmatan dalam pelbagai cara. Di Yaml, konfigurasi bekas mungkin kelihatan seperti ini:

parameters:
    # ...
    mailer.transport: sendmail

services:
    mailer:
        class:     Mailer
        arguments: ["%mailer.transport%"]
    newsletter_manager:
        class:     NewsletterManager
        calls:
            - [setMailer, ["@mailer"]]
Symfony sangat berguna dalam cara membahagikan konfigurasi kontena ke dalam parameter dan perkhidmatan. Ini membolehkan kekunci aplikasi seperti kekunci API, kunci penyulitan, dan token pengesahan untuk disimpan dalam fail parameter yang dikecualikan daripada repositori kod sumber.

Dalam PHP, konfigurasi yang sama komponen suntikan ketergantungan Symfony adalah seperti berikut:

use Symfony\Component\DependencyInjection\Reference;

// ...
$container->setParameter('mailer.transport', 'sendmail');

$container
    ->register('mailer', 'Mailer')
    ->addArgument('%mailer.transport%');

$container
    ->register('newsletter_manager', 'NewsletterManager')
    ->addMethodCall('setMailer', array(new Reference('mailer')));
Dengan menggunakan objek

dalam panggilan kaedah ke setMailer, logik suntikan ketergantungan dapat mengesan bahawa nilai ini tidak boleh diluluskan secara langsung, tetapi harus digantikan oleh perkhidmatan yang dirujuk di dalam bekas. Ini membolehkan nilai -nilai PHP yang suntikan dan perkhidmatan lain ke dalam perkhidmatan tanpa kekeliruan. Reference

Mula

Pertama, buat direktori projek baru dan buat fail composer.json yang boleh digunakan oleh komposer untuk memuatkan kelas kami secara automatik. Pada masa ini, fail ini hanya memaparkan ruang nama SitePointContainer ke direktori src.

interface ContainerInterface
{
    public function get($id);
    public function has($id);
}

Seterusnya, kerana kami akan membuat bekas kami melaksanakan antara muka interoperabilitas kontena, kami perlu mempunyai komposer memuat turunnya dan menambahkannya ke fail composer.json kami:

parameters:
    # ...
    mailer.transport: sendmail

services:
    mailer:
        class:     Mailer
        arguments: ["%mailer.transport%"]
    newsletter_manager:
        class:     NewsletterManager
        calls:
            - [setMailer, ["@mailer"]]

Di samping utama ContainerInterface, pakej container-interop juga mentakrifkan dua antara muka pengecualian. Yang pertama digunakan untuk pengecualian biasa yang ditemui semasa membuat perkhidmatan, dan yang lain digunakan apabila perkhidmatan yang diminta tidak dijumpai. Kami juga akan menambah pengecualian lain ke senarai ini apabila parameter yang diminta tidak dijumpai.

(kandungan berikut menghilangkan bahagian pelaksanaan kod kerana artikel terlalu panjang dan logik teras telah diterangkan di atas. Kod lengkap dalam repositori GitHub mengandungi pelaksanaan lengkap kelas pengecualian, kelas rujukan, dan bekas kelas.)

Ringkasan

Kami belajar bagaimana untuk membuat bekas suntikan ketergantungan yang mudah, tetapi terdapat banyak bekas lain yang mempunyai ciri -ciri yang kuat yang belum dilaksanakan!

Beberapa bekas suntikan pergantungan, seperti php-di dan aura.di, menyediakan ciri yang dipanggil Auto-Assembly. Di sini, teka -teki kontena mana perkhidmatan dalam bekas harus disuntik ke dalam perkhidmatan lain. Untuk melakukan ini, mereka menggunakan API Refleksi untuk mencari maklumat mengenai parameter pembina.

Anda boleh mendapatkan repositori seperti yang anda suka dan menambah ciri-ciri seperti pemasangan auto, yang merupakan latihan yang hebat! Di samping itu, kami menyimpan senarai umum semua versi derivatif yang diketahui dari bekas ini supaya orang lain dapat melihat apa yang anda lakukan. Hanya berkongsi kerja anda dengan kami menggunakan komen di bawah dan kami akan memastikan untuk menambahnya.

Anda juga boleh menghubungi kami menggunakan komen di bawah. Beritahu kami apa yang anda ingin jelaskan atau jelaskan, atau sebarang kesilapan yang anda dapati.

(bahagian Soalan Lazim ditinggalkan kerana kandungannya sangat diduplikasi dari atas dan terlalu panjang.)

Atas ialah kandungan terperinci Cara Membina Bekas Suntikan Ketergantungan Anda Sendiri. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Penalaan prestasi PHP untuk laman web trafik yang tinggiPenalaan prestasi PHP untuk laman web trafik yang tinggiMay 14, 2025 am 12:13 AM

Thesecrettokeepingaphp-poweredwebsiterunningsmoothlyunderheavyloadinVolvesserVeSkeystrategies: 1) pelaksanaanPodeCachingWithopCachetoreduceScriptexecutionTime, 2) UsedataBasequerycachingWnithSoRessendataBaBAboad, 3)

Suntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaSuntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaMay 14, 2025 am 12:08 AM

Anda harus mengambil berat tentang kebergantungan (DI) kerana ia menjadikan kod anda lebih jelas dan lebih mudah untuk dikekalkan. 1) Di menjadikannya lebih modular dengan decoupling kelas, 2) meningkatkan kemudahan ujian dan fleksibiliti kod, 3) menggunakan bekas DI untuk menguruskan kebergantungan kompleks, tetapi memberi perhatian kepada kesan prestasi dan kebergantungan bulat, 4) Amalan terbaik adalah bergantung kepada antara muka abstrak untuk mencapai gandingan longgar.

Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?May 14, 2025 am 12:04 AM

Ya, OptimizingaphpapplicationIspossibleandessential.1) pelaksanaanCachingUsingAputeDeducedeDataBaseload.2) OptimisedataTabaseseseshithindexing, eficientqueries, danConnectionPooling.3) EnhancecodeWithBuilt-Infungsi, EveringGlobalVariables

Pengoptimuman Prestasi PHP: Panduan TerbaikPengoptimuman Prestasi PHP: Panduan TerbaikMay 14, 2025 am 12:02 AM

ThekeystrategiestoSignificLantantlyboostphpapplicationperformanceare: 1) useopcodecachinglikLikeopcachetoreduceExecutionTime, 2) OptimizedataBaseInteractionsWithPreparedStatementsandProperindexing, 3) ConfigureWebserverserverLikenginxWithPmforbetterShipter.

Kontena Suntikan Ketergantungan PHP: Permulaan yang cepatKontena Suntikan Ketergantungan PHP: Permulaan yang cepatMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Suntikan ketergantungan berbanding pencari perkhidmatan di phpSuntikan ketergantungan berbanding pencari perkhidmatan di phpMay 13, 2025 am 12:10 AM

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Strategi Pengoptimuman Prestasi PHP.Strategi Pengoptimuman Prestasi PHP.May 13, 2025 am 12:06 AM

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

Pengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulPengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulMay 13, 2025 am 12:06 AM

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;

See all articles

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!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod