<?php namespace Auryn; class CachingReflector implements Reflector { const CACHE_KEY_CLASSES = 'auryn.refls.classes.'; const CACHE_KEY_CTORS = 'auryn.refls.ctors.'; const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.'; const CACHE_KEY_FUNCS = 'auryn.refls.funcs.'; const CACHE_KEY_METHODS = 'auryn.refls.methods.'; private $reflector; private $cache; public function __construct(Reflector $reflector = null, ReflectionCache $cache = null) { $this->reflector = $reflector ?: new StandardReflector; $this->cache = $cache ?: new ReflectionCacheArray; } public function getClass($class) { $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class); if (!$reflectionClass = $this->cache->fetch($cacheKey)) { $reflectionClass = new \ReflectionClass($class); $this->cache->store($cacheKey, $reflectionClass); } return $reflectionClass; }
Idea kami ialah apabila aplikasi menggunakan kelas Foo, ia akan mencipta kelas Foo dan memanggil kaedah kelas Foo Jika kaedah ini memerlukan kelas Bar, ia akan mencipta kelas Bar dan memanggil kaedah kelas Bar, dan kaedah ini Jika kelas Bim diperlukan, kelas Bim akan dibuat dan kemudian kerja lain akan dilakukan. Idea menggunakan suntikan dependensi ialah aplikasi menggunakan kelas Foo, kelas Foo memerlukan kelas Bar, dan kelas Bar memerlukan kelas Bim, kemudian buat kelas Bim dahulu, kemudian buat kelas Bar dan suntikan Bim, kemudian buat kelas Foo, dan masukkan kelas Bar , kemudian panggil kaedah Foo, Foo panggil kaedah Bar, dan kemudian lakukan kerja lain. Ini ialah corak Inretakon of Control. Kawalan kebergantungan diterbalikkan kepada permulaan rantaian panggilan. Dengan cara ini anda mempunyai kawalan penuh ke atas kebergantungan dan mengawal kelakuan program anda dengan melaraskan objek suntikan yang berbeza. Sebagai contoh, kelas Foo menggunakan memcache, dan anda boleh menggunakan redis sebaliknya tanpa mengubah suai kod kelas Foo.
Idea selepas menggunakan bekas suntikan kebergantungan ialah jika aplikasi perlu mengakses kelas Foo, ia mendapat kelas Foo daripada bekas, bekas mencipta kelas Bim, kemudian mencipta kelas Bar dan menyuntik Bim, kemudian mencipta Kelas Foo, dan menyuntik Bar ke dalamnya, dan kemudian menggunakan Program memanggil kaedah Foo, Foo memanggil kaedah Bar, dan kemudian melakukan kerja lain Secara ringkasnya, bekas bertanggungjawab untuk instantiasi, menyuntik kebergantungan, memproses kebergantungan, dsb.
Semua sumber di laman web ini disumbangkan oleh netizen atau dicetak semula oleh tapak muat turun utama. Sila semak integriti perisian itu sendiri! Semua sumber di laman web ini adalah untuk rujukan pembelajaran sahaja. Tolong jangan gunakannya untuk tujuan komersial. Jika tidak, anda akan bertanggungjawab untuk semua akibat! Jika terdapat sebarang pelanggaran, sila hubungi kami untuk memadamkannya. Maklumat hubungan: admin@php.cn
Artikel Berkaitan
26 Apr 2024
Cara mencipta pustaka fungsi PHP yang menyokong suntikan kebergantungan (DI): Cipta pakej Komposer sebagai pustaka fungsi. Laksanakan fungsi perpustakaan fungsi, seperti melaksanakan fungsi ucapan dalam fail. Pasang bekas PhpDI dan buat konfigurasi kontena, tambahkan kelas perpustakaan fungsi pada bekas sebagai definisi kilang. Gunakan perpustakaan dalam kod dan suntikan kebergantungan, seperti menggunakan bekas untuk mendapatkan contoh kelas perpustakaan. Dalam aplikasi praktikal, seperti menyimpan data pengguna ke pangkalan data, menyuntik sambungan pangkalan data untuk meningkatkan fleksibiliti.
01 Jun 2024
Rangka kerja Laravel mempunyai bekas suntikan kebergantungan (DI) berkuasa yang membawa kelebihan berikut: Gandingan longgar, kebolehujian yang dipertingkatkan dan kebolehgunaan semula Pengurusan pergantungan yang dipermudah, lebih mudah untuk menukar dan menyelenggara Organisasi yang lebih baik, mengumpulkan komponen mengikut jenis Laravel Bekas DI (dipanggil " bekas perkhidmatan") menyediakan ciri berkuasa seperti pengikatan automatik, petunjuk jenis dan kontrak. Dengan menyuntik contoh perkhidmatan dalam pengawal dan perkhidmatan mengikat dalam pembekal perkhidmatan, kebergantungan boleh diurus dengan mudah, meningkatkan kebolehbacaan dan kebolehselenggaraan kod.
25 Aug 2022
Apakah suntikan pergantungan DI? Artikel berikut akan memberi anda pemahaman yang mendalam tentang suntikan pergantungan DI dalam PHP. Saya harap ia akan membantu anda!
14 Jun 2023
Pengurusan kebergantungan adalah aspek yang sangat penting dalam pembangunan aplikasi PHP moden. Apabila skala projek meningkat secara beransur-ansur, mengurus kebergantungan semua kelas secara manual menjadi sangat kompleks dan sukar. Atas sebab ini, bekas IoC (InversionofControl) telah menjadi penyelesaian yang baik. Artikel ini akan memperkenalkan bekas IoC dan cara menggunakannya untuk mengurus kebergantungan dalam aplikasi PHP. Apakah bekas IoC? Bekas IoC ialah bekas yang digunakan untuk mengurus kebergantungan objek.
27 Apr 2024
Jawapan: Suntikan ketergantungan dan bekas perkhidmatan dalam PHP membantu mengurus kebergantungan secara fleksibel dan meningkatkan kebolehujian kod. Suntikan kebergantungan: Lulus kebergantungan melalui bekas untuk mengelakkan penciptaan langsung dalam fungsi, meningkatkan fleksibiliti. Bekas perkhidmatan: menyimpan contoh pergantungan untuk akses mudah dalam program, meningkatkan lagi gandingan longgar. Kes praktikal: Aplikasi sampel menunjukkan aplikasi praktikal bekas suntikan kebergantungan dan perkhidmatan, menyuntik kebergantungan ke dalam pengawal, mencerminkan kelebihan gandingan longgar.
17 Dec 2024
Mencipta Perpustakaan Statik yang Berpaut ke Perpustakaan Statik Lain Apabila membina perpustakaan statik yang bergantung pada kebergantungan daripada berbilang yang lain...
Hot Tools
Koleksi 50 algoritma PHP klasik yang sangat baik
Algoritma PHP klasik, pelajari idea yang sangat baik dan kembangkan pemikiran anda
Pustaka PHP kecil untuk mengoptimumkan imej
Pustaka PHP kecil untuk mengoptimumkan imej
Kelas fungsi PHP untuk algoritma kebarangkalian menang
Kelas fungsi PHP untuk algoritma kebarangkalian menang