Upgrade to Pro — share decks privately, control downloads, hide ads and more …

100行で書けるPSR-11

おぎ
April 12, 2025
360

 100行で書けるPSR-11

PHPConference小田原2025の発表資料です
https://github.com/togishima/DIYContainer/tree/master

参考資料:
- PSR-11: Container interface
https://www.php-fig.org/psr/psr-11/

- PHPerのための「PHP標準コーディングルール(PSR)について語り合う」Tech Cafe
https://hackmd.io/@E6hhS-xhQIqrpKokpl_yQQ/SyT9ePHru

- php-fig/container
https://github.com/php-fig/container

- PSR と各ライブラリ実装から DI コンテナの要件を整理する
https://speakerdeck.com/fuwasegu/php-conference-nagoya-2025

- 今こそ理解するDI(Dependency Injection)
https://fortee.jp/phperkaigi-2021/proposal/bfa7dda5-fa76-472f-bfbb-3e76f3434581

- コードを読もうぜ!~Laravel編~【プログラミング】
https://www.youtube.com/watch?v=YA74vBRD_A4

- namespaceとautoloading
https://docs.google.com/presentation/d/1pVTSdNuq5mySj7jCIhMuv8eTPtWXBuXzk7y6HHJ9khM/edit#slide=id.g10cb65bb7a2_0_0

- GoFデザインパターンとDI w/twada
https://fukabori.fm/episode/48

- 作って理解するDIコンテナ
https://fortee.jp/phperkaigi-2021/proposal/5fc8ee67-1171-47e2-bfaf-ef428e93d07e

- illuminate/container
https://github.com/illuminate/container/blob/master/Container.php#L858

おぎ

April 12, 2025
Tweet

Transcript

  1. PSR(PHP Standards Recommendations)とは? • PHPの標準仕様を定めたガイドライン • PSR-12(コーディング規約)、PSR-4(オートロード)など • PSRを守ることでメンテナンスしやすくなる •

    準拠していないライブラリも 多い • 主要なフレームワークが離脱してしまっている ※詳しくはPHPerのための「PHP標準コーディングルール( PSR)について語り合う」 TechCafeあたりを読んでくれ!
  2. PSR-11 Container Interfaceの仕様 • get():取得 ◦ ID(文字列)をパラメーターに取る ◦ 戻り値はmixed(=IDの実体) ◦

    コンテナがIDを識別できない場合は NotFoundExceptionInterfaceを実装した例外を投げる ◦ 同じIDの指定に対しては同じ値が返却されるべき(シングルトンかは実装による) • has():取得の可否 ◦ ID(文字列)をパラメーターに取る ◦ コンテナがIDを識別できる場合は trueを、そうでない場合は falseを返す ◦ hasの返り値がfalseならget()は必ずNotFoundExceptionInterfaceを実装した例外を投げる
  3. PSR-11 Container Interfaceの仕様 • get() ◦ ID(文字列)をパラメーターに取る ◦ 戻り値はmixed(=文字列に対応したインスタンス) ◦

    IDを識別できない場合はNotFoundExceptionInterfaceを実装した例外を投げる ◦ 同じIDの指定に対しては同じ値が返却されるべき(シングルトンかは実装による) • has() ◦ ID(文字列)をパラメーターに取る ◦ IDを識別できる場合はtrueを、そうでない場合はfalseを返す ◦ hasの返り値がfalseならget()は必ず例外(NotFoundExceptionInterface)を投げる
  4. PSR-11 Container Interfaceの仕様 • get() ◦ ID(文字列)をパラメーターに取る ◦ 戻り値はmixed(=文字列に対応したインスタンス) ◦

    IDを識別できない場合はNotFoundExceptionInterfaceを実装した例外を投げる ◦ 同じIDの指定に対しては同じ値が返却されるべき(シングルトンかは実装による) • has() ◦ ID(文字列)をパラメーターに取る ◦ IDを識別できる場合はtrueを、そうでない場合はfalseを返す ◦ hasの返り値がfalseならget()は必ず例外(NotFoundExceptionInterface)を投げる
  5. Appendix - PSR-11: Container interface - PHPerのための「PHP標準コーディングルール( PSR)について語り合う」Tech Cafe -

    php-fig/container - PSR と各ライブラリ実装から DI コンテナの要件を整理する - DIYContainer - 今こそ理解するDI(Dependency Injection) - コードを読もうぜ!~ Laravel編~【プログラミング】 - namespaceとautoloading - GoFデザインパターンとDI w/twada - 作って理解するDIコンテナ - illuminate/container