====== PSR-11: Container interface ====== --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-25// 本章は、若干の補足を加筆してはいるものの単に[[https://www.php-fig.org/psr/|PSRのサイト]]を日本語に翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。 関連記事 * [[psr:top|PSR - PHP標準勧告]] * [[psr:psr1|PSR-1: Basic Coding Standard - 基本コーディング規約]] * [[psr:psr3|PSR-3: Logger Interface - ロガーインターフェイス]] * [[psr:psr4|PSR-4: Autoloading Standard - オートローディング規約]] * [[psr:psr5|PSR-5: PHPDoc Standard(Draft) - PHPDoc規約]] * [[psr:psr6|PSR-6: Caching Interface - キャッシングインターフェイス]] * [[psr:psr7|PSR-7: HTTP Message Interface - HTTPメッセージインターフェイス]] * PSR-11: Container Interface - コンテナインターフェイス * [[psr:psr12|PSR-12: Extended Coding Style - 拡張コーディングスタイル]] * [[psr:psr13|PSR-13: Link definition interfaces - リンク定義インターフェース]] * [[psr:psr14|PSR-14: Event Dispatcher - イベントディスパッチャー]] * [[psr:psr15|PSR-15: HTTP Server Request Handlers - HTTPサーバーリクエストハンドラー]] * [[psr:psr16|PSR-16: Common Interface for Caching Libraries - キャッシングライブラリのための共通インターフェース]] * [[psr:psr17|PSR-17: HTTP Factories - HTTPファクトリー]] * [[psr:psr18|PSR-18: HTTP Client - HTTPクライアント]] * [[psr:psr19|PSR-19: PHPDoc tags(Draft) - PHPDocタグ]] ----- ====== PSR-11: コンテナインターフェース ====== --- // 原文より翻訳 [[https://www.php-fig.org/psr/psr-11/|PSR-11: Container interface]] 2020-05-25 現在 // このドキュメントでは、依存性注入コンテナの一般的なインターフェースについて説明します。 ContainerInterface が設定する目標は、フレームワークとライブラリがコンテナーを使用してオブジェクトとパラメーター(以下では「エントリ」と呼びます)を取得する方法を標準化することです。 このドキュメントのキーワード ''MUST'' , ''MUST NOT'' , ''REQUIRED'' , ''SHALL'' , ''SHALL NOT'' , ''SHOULD'' , ''SHOULD NOT'' , ''RECOMMENDED'' , ''MAY'' 及び ''OPTIONAL'' は、 [[https://www.ietf.org/rfc/rfc2119.txt|RFC 2119]]で説明されているように解釈して下さい。 > **RFC 2119の説明** > ''MUST'', ''REQUIRED'', ''SHALL'' --- 絶対必要 > ''MUST NOT'', ''SHALL NOT'' --- 絶対禁止 > ''SHOULD'', ''RECOMMENDED'' --- 推奨(但し、無視できる特定の正当な理由が存在するかもしれない) > ''SHOULD NOT'' --- 推奨できない(但し、許可できる特定の正当な理由が存在するかもしれない) > ''MAY'', ''OPTIONAL'' --- オプション このドキュメントの「インプリメンター」という言葉は、依存性注入に関連するライブラリまたはフレームワークに ''ContainerInterface'' を実装している人のことと解釈して下さい。依存性注入コンテナー(DIC)の利用者は「ユーザー」と呼びます。 \\ ===== 1. 仕様 ====== ==== 1.1 基本 ===== === 1.1.1 エントリ識別子 === エントリ識別子は、少なくとも1文字のPHPの正当な文字列で、コンテナ内のアイテムを一意に識別します。 エントリ識別子は不透明(opaque)な文字列であるため、呼び出し元は文字列の構造に意味的な物があると仮定してはなりません ( ''SHOULD NOT'' )。 === 1.1.2 Reading from a containerコンテナーからの読み取り === * Psr\Container\ContainerInterfaceは、''get'' と ''has'' の2つのメソッドを公開しています。 * ''get'' は、必須のパラメータを1つ取ります:そのパラメータはエントリ識別子で、文字列でなければなりません ( ''MUST'' )。 ''get'' は何でもを返すことができ( ''mixed'' value )、識別子がコンテナに認識されない場合は''NotFoundExceptionInterface'' をスローできます。同じ識別子で取得する2つの連続した呼び出しは、同じ値を返すべきです ( ''SHOULD'' )。 ただし、実装者の設計やユーザー設定によっては、異なる値が返される可能性があるため、ユーザーは2つの連続した呼び出しで同じ値を取得することに依存すべきではありません ( ''SHOULD NOT'' )。 * ''has'' は、一意のパラメータを1つ取ります:そのパラメータはエントリ識別子で、文字列でなければなりません ( ''MUST'' )。''has'' はエントリ識別子がコンテナに認識されている場合は ''true'' を、認識されていない場合は ''false'' を返す必要があります ( ''MUST'' )。''has($id)'' が ''false'' を返す場合、''get($id)'' は''NotFoundExceptionInterface'' をスローする必要があります ( ''MUST'' )。 \\ ==== 1.2 例外 ===== コンテナによって直接スローされる例外は [[#3.2. Psr\Container\ContainerExceptionInterface|Psr\Container\ContainerExceptionInterface]] を実装すべきです ( ''SHOULD'' )。 存在しないIDでgetメソッドを呼び出すと、[[#3.3. Psr\Container\NotFoundExceptionInterface|Psr\Container\NotFoundExceptionInterface]] がスローする必要があります ( ''MUST'' )。 \\ ==== 1.3 推奨される使用法 ===== オブジェクトが独自の依存関係を取得できるように、ユーザーはコンテナをオブジェクトに渡すべきではありません ( ''SHOULD NOT'' )。つまり、コンテナーを[[https://en.wikipedia.org/wiki/Service_locator_pattern|サービスロケーター]]として使用することは、一般的には推奨されないパターンです。 詳細については、METAドキュメントの[[https://www.php-fig.org/psr/psr-11/meta/#4-recommended-usage-container-psr-and-the-service-locator|セクション4]]を参照してください。 \\ ===== 2. パッケージ ===== 説明されているインターフェースとクラス、および関連する例外は、[[https://packagist.org/packages/psr/container|psr/container]] パッケージの一部として提供されます。 PSRコンテナーの実装を提供するパッケージは、''psr/container-implementation'' ''1.0.0'' を提供することを宣言する必要があります。 実装が必要なプロジェクトでは、''psr/container-implementation'' ''1.0.0'' を 要求する必要があります。 \\ ===== 3. インターフェース ===== ==== 3.1. Psr\Container\ContainerInterface ==== \\ ==== 3.2. Psr\Container\ContainerExceptionInterface ==== \\ ==== 3.3. Psr\Container\NotFoundExceptionInterface ==== \\