PHP Academy · レッスン

DependencyInjectionコンテナ

SymfonyのDIコンテナでサービスを登録し、依存関係を接続します

レッスン 2/413 ステップ

「DependencyInjectionコンテナ」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

依存性注入とは

依存性注入(DI)は、クラスが依存関係を内部で作成するのではなく外部から受け取るパターンです。これにより、テストしやすく疎結合なコードになります。

Symfony DIコンポーネント

Symfonyのsymfony/dependency-injectionコンポーネントは、サービス定義の自動配線、設定、キャッシュに対応した強力なIoCコンテナを提供します。

$ composer require symfony/dependency-injection

コンテナの作成

コンテナを構築してサービスを登録します。

<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;

$container = new ContainerBuilder();

// Register a service:
$container->register("logger", \App\Logger::class);

コンストラクタ引数の追加

サービス定義にコンストラクタ引数を渡します。

<?php
$container->register("mailer", \App\Mailer::class)
    ->addArgument("smtp.example.com")
    ->addArgument(587);

サービス参照

Referenceを使用して、あるサービスを別のサービスに注入します。

<?php
use Symfony\Component\DependencyInjection\Reference;

$container->register("email_service", \App\EmailService::class)
    ->addArgument(new Reference("mailer"))
    ->addArgument(new Reference("logger"));

サービスの取得

コンテナからサービスを取得します。依存関係は自動的に解決されます。

<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");

自動配線

自動配線を有効にすると、コンテナが型ヒントを調べ、一致するサービスを自動的に注入します。

<?php
$container->register(EmailService::class)
    ->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)

パラメータ

設定値をコンテナパラメータとして保存します。

<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);

// Reference in service definition:
$container->register("mailer", Mailer::class)
    ->addArgument("%mailer.host%")
    ->addArgument("%mailer.port%");

YAML設定

YAMLでサービスを定義します(symfony/configとsymfony/yamlが必要です)。

# services.yaml
services:
    App\Mailer:
        arguments:
            - "%mailer.host%"
            - "%mailer.port%"

コンテナのコンパイル

パフォーマンス向上のためにコンテナをコンパイルします。これにより定義が検証され、サービスグラフが最適化されます。

<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());

共有サービスと非共有サービス

デフォルトでは、サービスは共有されます(シングルトン)。shared(false)を設定すると、サービスを取得するたびに新しいインスタンスが返されます。

まとめ

Symfony DIコンテナは、サービスを登録し、配線し、解決します。利便性のために自動配線を使用し、設定にはパラメータを使用します。本番環境ではパフォーマンス向上のためにコンテナをコンパイルします。

理解度チェック

Symfony DIコンテナの自動配線は何を行いますか?

無料で開始

AI チューターと学ぶ PHP — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
49
レッスン
195

よくある質問

「DependencyInjectionコンテナ」レッスンは無料ですか?

はい。「DependencyInjectionコンテナ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「DependencyInjectionコンテナ」で何を学びますか?

SymfonyのDIコンテナでサービスを登録し、依存関係を接続します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「DependencyInjectionコンテナ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. HttpFoundation:リクエストとレスポンス
  2. DependencyInjectionコンテナ
  3. EventDispatcher:疎結合なイベント
  4. Consoleコンポーネント:CLIコマンド
← PHP Academyに戻る