PHP 関数の依存関係注入とサービス コンテナー

PHPz
リリース: 2024-04-27 13:39:01
オリジナル
999 人が閲覧しました

回答: PHP の依存関係インジェクションとサービス コンテナーは、依存関係を柔軟に管理し、コードのテスト容易性を向上させるのに役立ちます。依存関係の注入: 依存関係をコンテナー経由で渡し、関数内での直接作成を回避し、柔軟性を向上させます。サービス コンテナ: プログラム内で簡単にアクセスできるように依存関係インスタンスを保存し、疎結合をさらに強化します。実際のケース: サンプル アプリケーションは、依存関係の注入とサービス コンテナーの実際のアプリケーションを示し、疎結合の利点を反映してコントローラーに依存関係を注入します。

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

PHP 関数用の依存性インジェクションとサービス コンテナー

はじめに
依存性インジェクション (DI)これは、依存関係を関数本体内で直接作成するのではなく、関数内で依存関係を渡すことを可能にするデザイン パターンです。これにより、コードがより柔軟になり、テストしやすくなります。サービス コンテナーは、依存関係を管理するライブラリです。これにより、依存関係ごとに 1 つのインスタンスが保存され、アプリケーション内のどこからでもアクセスできるようになります。

依存性注入
PHP 関数で依存性注入を使用するには、「コンテナ」と呼ばれるクラスを使用できます。このクラスは、依存関係の作成と保存を担当します。

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);
    }
  }
}
ログイン後にコピー

これで、関数の get() メソッドを使用して依存関係を取得できます:

function sendEmail(Container $container, string $to, string $subject, string $body) {
  $mailer = $container->get('Mailer');
  $mailer->send($to, $subject, $body);
}
ログイン後にコピー

Service Container
Serviceコンテナ 依存関係を管理するための拡張ライブラリです。これにより、依存関係ごとに 1 つのインスタンスが保存され、アプリケーション内のどこからでもアクセスできるようになります。

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 {
  // ...
}
ログイン後にコピー

このアプリケーションでは、## への依存関係注入を使用します。 #DatabaseLogger の依存関係は、Controller クラスに渡されます。サービス コンテナは、これらの依存関係の作成と管理を担当します。

結論 依存関係の注入とサービス コンテナーは、PHP アプリケーションの柔軟性とテスト容易性を向上させるための強力なツールです。これらにより、疎結合の方法で依存関係を管理できるようになり、コードの保守と拡張が容易になります。

以上がPHP 関数の依存関係注入とサービス コンテナーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!