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

PHPのDI、attributesとこれから / PHP DI with attributes

PHPのDI、attributesとこれから / PHP DI with attributes

2021年3月28日、PHPerKaigi 2021・Day 2での発表資料です。
https://phperkaigi.jp/2021/

YAMAOKA Hiroyuki

March 26, 2021
Tweet

More Decks by YAMAOKA Hiroyuki

Other Decks in Programming

Transcript

  1. PHP DI


    attributes
    2021 3 28 / PHPerKaigi
    2 0
    2
    1
    Day
    2

    View Slide

  2. - / @hiro_y


    - PHP Node.js Web


    -


    - CTO

    View Slide

  3. -


    -


    -


    - iruca mimemo
    👨💻👨💻

    View Slide

  4. - PHPerKaigi
    2
    0 20
    Day
    0


    - 2020 2 9


    - PHP



    https://speakerdeck.com/hiro_y/about-php-annotations


    https://www.youtube.com/watch?v=TdHDqOeCUW
    4

    View Slide

  5. 🎉 PHP
    8
    .
    0
    🎉


    2020 11

    View Slide

  6. https://www.php.net/releases/
    8
    .
    0
    /ja.php

    View Slide

  7. DI




    View Slide

  8. DI
    - Dependency:


    - Injection:
    class Client {

    public function __construct(private Service $service) {}

    }

    View Slide

  9. PHP DI


    View Slide

  10. DI
    - Maple https://ja.osdn.net/projects/maple/


    - S
    2
    Container.PHP
    5


    http://s
    2
    container.php
    5
    .seasar.org/
    2
    .
    0
    /ja/index.html


    - PHP
    5

    View Slide

  11. - Java DI


    - Struts
    1
    Spring Seasar
    2


    - PHP
    5

    - DI

    View Slide

  12. PHP DI
    - PHP DI


    -


    - Web :


    - TDD CI :

    View Slide

  13. PHP
    8

    View Slide

  14. PHP
    -


    - interface


    - autoload require


    - TDD CI

    View Slide

  15. DI
    - execute($request)


    :


    - show(Request $request)


    : routing


    - show(ServerRequestInterface $request)


    interface :

    View Slide

  16. - IDE PhpStorm VSCode


    - interface


    - APC OPcache


    -

    View Slide

  17. - Symfony Laravel CakePHP


    - DI


    -
    🕵

    View Slide

  18. - URL


    -


    -


    -

    View Slide

  19. Symfony
    - Service Container


    https://symfony.com/doc/
    5
    .
    2
    /components/dependency_injection.html


    - Dependencyinjection component


    - PSR-
    1
    1

    - 2

    View Slide

  20. Laravel
    - Service Container


    https://laravel.com/docs/
    8
    .x/container


    - Illuminate\Container\Container


    - PSR-
    1
    1

    - Facades

    View Slide

  21. : PSR-
    1
    1
    - PSR-
    1
    1
    : Container Interface


    https://www.php-
    fi
    g.org/psr/psr-
    1 1
    /


    -


    - :


    View Slide

  22. PHP-DI
    - DI https://php-di.org/


    - PSR-
    1
    1

    - Slim middleware


    View Slide

  23. PHP-DI
    7
    - 2021 3 10 : beta
    3

    - beta


    - Attributes


    - PHP
    8
    PHP-DI
    6

    View Slide

  24. PHP-DI
    7
    - @Inject disabled #[Inject]


    -


    -


    - PhpDocReader

    View Slide

  25. Attributes
    /**


    * @Inject({"db.host", "db.name"})


    */


    public function __construct($param1, $param2)
    use DI\Attribute\Inject;


    #[Inject('db.host', 'db.name')]


    public function __construct($param1, $param2)

    View Slide

  26. @Inject
    - doctrine/annotations


    - Re
    fl
    ection DocComment


    - DocLexer


    -

    View Slide

  27. #[Inject]
    - PHP
    8
    Attributes
    namespace DI\Attribute;


    use Attribute;


    #[Attribute(Attribute::TARGET_PROPERTY |
    Attribute::TARGET_METHOD | Attribute::TARGET_PARAMETER)]


    final class Inject


    {...

    View Slide

  28. DI


    View Slide

  29. Inject
    -


    - Inject


    - Autowire


    -

    View Slide

  30. Autowire
    - Inject


    -


    - Zero Con
    fi
    guration


    - PHP-DI DI

    View Slide

  31. Autowire
    -


    - class_exists / interface_exists


    -


    - interface

    View Slide

  32. autowire DI


    View Slide

  33. View Slide

  34. DI
    -


    -


    - Service


    -

    View Slide

  35. -


    -


    -


    -

    View Slide

  36. View Slide

  37. DI
    -


    - PSR


    - attributes


    View Slide

  38. View Slide