Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Suntikan ketergantungan dan bekas perkhidmatan untuk fungsi PHP

Suntikan ketergantungan dan bekas perkhidmatan untuk fungsi PHP

PHPz
PHPzasal
2024-04-27 13:39:011036semak imbas

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.

PHP 函数的依赖注入和服务容器

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 的 ContainerInterfaceContainerBuilder 类。

// 配置服务容器
$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 {
  // ...
}

在这个应用程序中,我们使用依赖注入将 DatabaseLogger 依赖项传递到 Controllerrrreee

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.

Dalam PHP, kami mengesyorkan menggunakan kelas 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!

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