Rumah > Artikel > pembangunan bahagian belakang > Suntikan ketergantungan dan bekas perkhidmatan untuk fungsi PHP
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 kejadian 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.
Dependency Injection dan Service Container untuk PHP Functions
Pengenalan
Dependency Injection (DI) ialah corak reka bentuk yang membolehkan kita melepasi dependensi dalam fungsi dan bukannya menciptanya secara langsung dalam badan Ini menjadikan kod kami lebih fleksibel dan boleh diuji. Bekas perkhidmatan ialah perpustakaan yang menguruskan kebergantungan. Ia menyimpan satu contoh untuk setiap kebergantungan dan membolehkan kami mengaksesnya dari mana-mana sahaja dalam aplikasi.
Dependency Injection
Untuk menggunakan dependency injection dalam fungsi PHP, kita boleh menggunakan kelas yang dipanggil "bekas". Kelas ini akan bertanggungjawab untuk mencipta dan menyimpan kebergantungan.
class Container { private $dependencies = []; public function get($dependency) { if (!isset($this->dependencies[$dependency])) { $this->dependencies[$dependency] = $this->create($dependency); } return $this->dependencies[$dependency]; } private function create($dependency) { switch ($dependency) { case 'Database': return new Database(); case 'Logger': return new Logger(); default: throw new Exception('Unknown dependency: ' . $dependency); } } }
Kini, kita boleh menggunakan kaedah get()
dalam fungsi untuk mendapatkan dependensi: get()
方法来获取依赖项:
function sendEmail(Container $container, string $to, string $subject, string $body) { $mailer = $container->get('Mailer'); $mailer->send($to, $subject, $body); }
服务容器
服务容器是一种管理依赖项的扩展库。它为每个依赖项存储一个单一的实例,并允许我们在应用程序的任何地方访问它们。
在 PHP 中,我们推荐使用 Symfony 的 ContainerInterface
和 ContainerBuilder
类。
// 配置服务容器 $container = new ContainerBuilder(); $container->register('database', Database::class); $container->register('logger', Logger::class); // 编译服务容器 $container->compile(); // 使用服务容器 $database = $container->get('database'); $logger = $container->get('logger');
实战案例
以下是一个使用依赖注入和服务容器的示例应用程序:
// index.php require 'vendor/autoload.php'; $container = new Container(); $controller = $container->get('Controller'); $controller->index(); // Controller.php class Controller { private $database; private $logger; public function __construct(Container $container) { $this->database = $container->get('Database'); $this->logger = $container->get('Logger'); } public function index() { // ... } } // Database.php class Database { // ... } // Logger.php class Logger { // ... }
在这个应用程序中,我们使用依赖注入将 Database
和 Logger
依赖项传递到 Controller
rrreee
Service ContainerContainer perkhidmatan ialah pustaka sambungan yang menguruskan dependencies. Ia menyimpan satu contoh untuk setiap pergantungan dan membolehkan kami mengaksesnya dari mana-mana sahaja dalam aplikasi.
ContainerInterface
dan ContainerBuilder
Symfony. 🎜rrreee🎜🎜Kes praktikal🎜🎜Berikut ialah contoh aplikasi menggunakan suntikan kebergantungan dan bekas perkhidmatan: 🎜rrreee🎜Dalam aplikasi ini, kami menggunakan suntikan kebergantungan untuk menggabungkan Pangkalan Data
dan Logger kebergantungan dihantar ke kelas <code>Controller
. Bekas perkhidmatan bertanggungjawab untuk mencipta dan mengurus kebergantungan ini. 🎜🎜🎜Kesimpulan🎜🎜Suntikan kebergantungan dan bekas perkhidmatan ialah alat berkuasa untuk meningkatkan fleksibiliti dan kebolehujian aplikasi PHP. Mereka membenarkan kami mengurus kebergantungan secara longgar, menjadikan kod kami lebih mudah untuk dikekalkan dan dilanjutkan. 🎜Atas ialah kandungan terperinci Suntikan ketergantungan dan bekas perkhidmatan untuk fungsi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!