Gunakan Suntikan Ketergantungan (DI) untuk meningkatkan kebolehujian fungsi tersuai dalam sambungan PHP: Cipta bekas DI dan daftarkan kebergantungan serta fungsi tersuai. Gunakan bekas DI untuk mendapatkan kebergantungan dalam fungsi tersuai. Gunakan kelas olok-olok untuk menggantikan kebergantungan dalam ujian dan memudahkan ujian.
Pembangunan sambungan PHP: Menggunakan suntikan kebergantungan untuk meningkatkan kebolehujian fungsi tersuai
Pengenalan
Dalam pembangunan sambungan PHP, fungsi tersuai boleh meningkatkan fungsi dan fleksibiliti sambungan dengan ketara. Walau bagaimanapun, kebolehujian fungsi ini selalunya boleh menjadi satu cabaran. Dengan memperkenalkan suntikan pergantungan (DI), kami boleh meningkatkan kebolehujian fungsi tersuai dengan ketara, menjadikannya lebih mudah untuk ujian unit dan penyepaduan.
Suntikan Ketergantungan
DI ialah corak reka bentuk yang menghantar kebergantungan objek kepada objek dan bukannya membiarkan objek mencipta kebergantungan itu sendiri. Dalam kes kami, ini bermakna kami menghantar kebergantungan (seperti sambungan pangkalan data) kepada fungsi tersuai dan bukannya membiarkan fungsi mencipta sambungan itu sendiri.
Buat bekas suntikan
Pertama, kita perlu buat bekas DI. Dalam bekas ini kami akan mendaftarkan fungsi tersuai kami dan kebergantungannya. Anda boleh menggunakan kelas bekas suntikan kebergantungan terbina dalam PHP atau rangka kerja DI pihak ketiga.
// 创建 DI 容器 $container = new Container(); // 注册依赖项和自定义函数 $container->set('db', new PDO('mysql:host=localhost;dbname=test', 'root', '')); $container->set('customFunction', function($db) { // 自定义函数使用传递的依赖项 });
Menggunakan DI Container
Kini kita boleh menggunakan bekas DI dalam fungsi tersuai untuk mendapatkan kebergantungan.
// 使用 DI 容器获取依赖项 $fn = $container->get('customFunction'); // 调用自定义函数,依赖项将自动传递 $fn->handle();
Kes Praktikal
Mari kita pertimbangkan fungsi tersuai mailer
, yang menyediakan fungsi penghantaran e-mel. send_email
,它将电子邮件发送给用户。此函数依赖于 mailer
类,该类提供电子邮件发送功能。
使用 DI 之前
在没有 DI 的情况下,自定义函数将直接创建 mailer
类。这会使测试变得困难,因为我们需要模拟 mailer
类或使用真实的 SMTP 服务器。
// 没有 DI 的自定义函数 function send_email($to, $subject, $message) { $mailer = new Mailer(); $mailer->send($to, $subject, $message); }
使用 DI 之后
使用 DI 后,自定义函数可以从 DI 容器中获取 mailer
依赖项。这使得我们能够在测试中将 mailer
Sebelum menggunakan DITanpa DI, fungsi tersuai akan terus mencipta kelas mailer
. Ini boleh menyukarkan ujian kerana kita perlu mengejek kelas mailer
atau menggunakan pelayan SMTP sebenar.
// 使用 DI 的自定义函数 function send_email($to, $subject, $message, $container) { $mailer = $container->get('mailer'); $mailer->send($to, $subject, $message); } // 测试自定义函数 $container = new Container(); $container->set('mailer', new MockMailer()); // 使用模拟类代替 mailer 类 send_email('test@example.com', 'Test Subject', 'Test Message', $container);
mailer
daripada bekas DI. Ini membolehkan kami menggantikan mailer
dengan kelas olok-olok dalam ujian kami, menjadikan ujian lebih mudah. 🎜rrreee🎜🎜Kesimpulan🎜🎜Dengan memanfaatkan suntikan pergantungan, kami dapat meningkatkan kebolehujian fungsi tersuai kami dengan ketara. Ia membolehkan kami menggantikan kebergantungan dalam ujian dengan mudah, menjadikan ujian lebih pantas dan lebih dipercayai. 🎜Atas ialah kandungan terperinci Pembangunan sambungan PHP: Bagaimana untuk meningkatkan kebolehujian fungsi tersuai melalui suntikan pergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!