Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan sambungan PHP: Bagaimana untuk meningkatkan kebolehujian fungsi tersuai melalui suntikan pergantungan?

Pembangunan sambungan PHP: Bagaimana untuk meningkatkan kebolehujian fungsi tersuai melalui suntikan pergantungan?

WBOY
WBOYasal
2024-06-01 18:35:01999semak imbas

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: Bagaimana untuk meningkatkan kebolehujian fungsi tersuai melalui suntikan pergantungan?

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 send_email yang menghantar e-mel kepada pengguna. Fungsi ini bergantung pada kelas 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);

🎜Selepas menggunakan DI🎜🎜Selepas menggunakan DI, fungsi tersuai boleh mendapatkan kebergantungan 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!

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