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

#phpcon 良いコードを書けるようになるコツは「エラーを気にする」 〜プログラマにとってエラーとは何なのか〜

#phpcon 良いコードを書けるようになるコツは「エラーを気にする」 〜プログラマにとってエラーとは何なのか〜

PHP Conference Japan 2023での発表資料です。
https://fortee.jp/phpcon-2023/proposal/b2568517-f8ae-4ae7-85f4-89adc624fcda

hideki kinjyo
PRO

October 08, 2023
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript


  1. PHP Conference 2023


    Hideki Kinjyo


    GitHub: o0h / Twitter: @o0h_


    [ൃද൛]

    View Slide

  2. ࣗݾ঺հ
    /
    GitHub: @o0h / X: @o0h_
    FW CakePHP


    View Slide

  3. ⏳estimate: 0 1 /25

    View Slide

  4. ⏳estimate: 0 1 /25

    View Slide


  5. ⏳estimate: 0 1 /25

    View Slide

  6. ҧ͏ʂʂ
    Τϥʔ͸ఢ͡Όͳ͍ɺ
    ༑ୡͳΜͩʂʂ
    ⏳estimate: 1 /25

    View Slide

  7. ͜ΜͳࣄΛ࿩͍͖ͯ͠·͢
    PHP

    ⏳estimate: 1 2 /25
    ˒খ͞ͳએ఻ίʔφʔ˒

    View Slide

  8. ͜Μͳ΋ͷΛ࣋ͬͯؼͬͯ΋Β͍͍ͨ
    PHP

    ⏳estimate: 1 2 /25

    View Slide

  9. ͓͠ͳ͕͖
    1.
    2. PHP
    3.
    4. PRO
    5. PHP

    ⏳estimate: 1 2 /25

    View Slide

  10. §1

    View Slide

  11. ϓϩάϥϛϯάݴޠ͸ͳͥʮΤϥʔʯΛݴͬͯ͘Δͷʁ
    =

    ⏳estimate: 1 2 /25

    View Slide

  12. PHP Software Developers



    ⏳estimate: 1 2 /25

    View Slide

  13. PHP Software Developers



    ૝͍
    ⏳estimate: 2 /25

    View Slide

  14. ⏳estimate: 2 /25

    View Slide

  15. ⏳estimate: 2 /25

    View Slide

  16. Τϥʔͷ͋Δੈքɺͳ͍ੈքɾɾɾͲ͕ͬͪྑ͍Ͱ͔͢ʁ
    :
    31
    :
    :
    :

    ⏳estimate: 2~3 /25

    View Slide

  17. Τϥʔͷ͋Δੈքɺͳ͍ੈքɾɾɾͲ͕ͬͪྑ͍Ͱ͔͢ʁ
    (= )
    =>
    =>
    =>

    ⏳estimate: 2~3 /25

    View Slide

  18. Τϥʔͷ͋Δੈքͷํ͕ɺ༏͍͠ੈք
    2

    ⏳estimate: 2~3 /25

    View Slide

  19. PHP 👀
    ⏳estimate: 2~3 /25

    View Slide

  20. ྫ͑͹sprintf()ͷྫ
    (%
    )
    switch

    src:
    IUUQTHJUIVCDPNQIQQIQTSDCMPCQIQFYUTUBOEBSEGPSNBUUFE@QSJOUD--

    View Slide

  21. ྫ͑͹sprintf()ͷྫ
    case (default )

    ⏳estimate: 3 /25

    View Slide

  22. ྫ͑͹sprintf()ͷྫ

    src:
    IUUQTHJUIVCDPNQIQQIQTSDCMPCQIQFYUTUBOEBSEGPSNBUUFE@QSJOUD--
    (% )

    View Slide


  23. ⏳estimate: 3 /25

    View Slide

  24. Τϥʔɺ͑Βʙ͍👏
    :
    :

    ⏳estimate: 3~4 /25

    View Slide

  25. §2
    PHP

    View Slide

  26. §2 PHP
    .1
    .2 PHP

    View Slide

  27. Τϥʔʹ͸ʮఔ౓ʯ͕͋Δͧ
    ( )


    ⏳estimate: 4 /25

    View Slide

  28. [ࣸਅ]


    (্) ৅ҹ ενʔϜࣜՃ࣪ث EE-RQ35ܕ/EE-RQ50ܕ औѻઆ໌ॻ


    (Լ) ΞΠϦεΦʔϠϚ ਅۭอଘϑʔυγʔϥʔ VPF-385T औѻઆ໌ॻ


    ࢀߟ: Ոి඼Λ҆શʹ࢖͏ͨΊͷϚʔΫʛҰൠࡒஂ๏ਓՈి੡඼ڠձ https://aeha.or.jp/safety/mark/index.html
    ৘ใͷ෼ྨͷྫ: ՈిͷϚχϡΞϧ
    :
    :

    View Slide

  29. ৘ใͷ෼ྨͷྫ: ՈిͷϚχϡΞϧ

    [ࣸਅ]


    ৅ҹ ενʔϜࣜՃ࣪ث EE-RQ35ܕ/EE-RQ50ܕ औѻઆ໌ॻ

    View Slide

  30. ৘ใ͕෼ྨ͞Ε͍ͯΔͱศརͰ͢Ͷʂ

    ⏳estimate: 5 /25

    View Slide

  31. ͲΜͳʮఔ౓ʯ͕͋Δʁ
    :
    :
    ( ):
    :

    ⏳estimate: 5~6 /25

    View Slide

  32. §2 PHP
    .1
    .2 PHP
    ⏳estimate: 5~6 /25

    View Slide

  33. PHPʹ͓͚ΔΤϥʔఆ਺(ΤϥʔϨϕϧ)

    IUUQTXXXQIQOFUNBOVBMKBFSSPSGVODDPOTUBOUTQIQ

    View Slide

  34. PHPͷΤϥʔܥ౷

    View Slide

  35. PHPͷΤϥʔܥ౷

    ͦΕͧΕɺ఻͑Α͏ͱ͍ͯ͠Δҙਤ͕ҧͬͨΓ

    ΋ͨΒ݁͢Ռ͕ҧ͏Μͩͳʙ ۠ผ͕͋ΔΜͩͳʙ

    ⏳estimate: 6 /25

    View Slide

  36. PHPͷΤϥʔͨͪʙ͜Ε͚ͩ͸֮͑Α͏ʙ
    E_ERROR => [ ] PHP
    E_WARNING => [ ] PHP
    E_NOTICE => [ ] PHP

    ⏳estimate: 6 /25

    View Slide

  37. E_ERROR / ॏେ
    (Throwable)

    ⏳estimate: 6~7 /25

    View Slide

  38. E_WARNING / ܯࠂ
    ( )
    ( ) URL

    View Slide

  39. E_NOTICE / ஫ҙ

    View Slide

  40. §3

    View Slide

  41. §3
    .1
    .2
    ⏳estimate: 7 /25

    View Slide

  42. ྑ͘ͳͦ͞͏ͳίʔυͱ͍͏ͷ͕͋Δ

    ⏳estimate: 7 /25

    View Slide

  43. ᐆດ͞ʹ͍ͭͯ: shin1x1͞Μʮ੍໿ͷྗʯ

    https://speakerdeck.com/shin1x1/restricting-states
    ⏳estimate: 7~8 /25

    View Slide

  44. ᐆດ͞ʹ͍ͭͯ: shin1x1͞Μʮ੍໿ͷྗʯ

    https://speakerdeck.com/shin1x1/restricting-states
    ⏳estimate: 7~8 /25

    View Slide

  45. ᐆດ͞ʹ͍ͭͯ: shin1x1͞Μʮ੍໿ͷྗʯ

    https://speakerdeck.com/shin1x1/restricting-states
    ⏳estimate: 7~8 /25

    View Slide

  46. ᐆດ͞ʹ͍ͭͯ: shin1x1͞Μʮ੍໿ͷྗʯ

    https://speakerdeck.com/shin1x1/restricting-states
    ⏳estimate: 8 /25

    View Slide

  47. ᐆດ͞ʹ͍ͭͯ: t-wada͞Μͷʮ༧๷ʹউΔ๷ޚͳ͠ʯ

    https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022
    ⏳estimate: 8 /25

    View Slide

  48. ᐆດ͞ʹ͍ͭͯ: t-wada͞Μͷʮ༧๷ʹউΔ๷ޚͳ͠ʯ

    https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022
    ⏳estimate: 8 /25

    View Slide

  49. ྑ͘ͳ͍ίʔυ͕͜͏ͯ͠ੜ·ΕΔͧ
    ( )

    ⏳estimate: 8~9 /25

    View Slide

  50. ΤϥʔͱՄೳੑ




    ⏳estimate: 8~9 /25

    View Slide

  51. ͜ͷίʔυ͸ո͍͕͠ɾɾɾ

    ⏳estimate: 9 /25

    View Slide

  52. ͜ͷίʔυ͸ո͍͕͠ɾɾɾ
    PHP

    ⏳estimate: 9~10 /25

    View Slide

  53. §3
    .1
    .2
    ⏳estimate: 9~10 /25

    View Slide

  54. Α͘ͳͦ͞͏ͳίʔυΛආ͚ΔͨΊʹ

    ⏳estimate: 10 /25

    View Slide

  55. Τϥʔɺcase-by-case
    ( ) ( )

    ⏳estimate: 10 /25

    View Slide

  56. ࣮ྫʂϓϩάϥϛϯά
    ( )


    ⏳estimate: 10~11 /25

    View Slide

  57. ࣮ྫʂPHP
    ( )

    View Slide

  58. ࣮ྫʂPHP
    :

    include E_WARNING
    require E_ERROR

    https://www.php.net/manual/ja/function.include.php

    ⏳estimate: 10~11 /25

    View Slide

  59. ΤϥʔϨϕϧ͸ओ؍తʹܾ·Δ(ଆ໘΋͋Δ)

    ⏳estimate: 11 /25

    View Slide

  60. ίϨ͸͋ͳͨͷ௚؍ʹ߹͏ʁ
    E_ERROR

    View Slide

  61. ΤϥʔʹࣖΛ܏͚͍ͯ͜͏ʙ

    ⏳estimate: 11 /25

    View Slide

  62. ΤϥʔʹࣖΛ܏͚͍ͯ͜͏ʙ
    
 



    ⏳estimate: 11~12 /25

    View Slide

  63. §4
    PRO

    View Slide

  64. Τϥʔɺා͍Ͱ͔͢ʁ
    ( )

    ⏳estimate: 12 /25

    View Slide

  65. ΤϥʔͷPRO͕ɺ஌͍ͬͯΔ͜ͱ
    
 

    ( )



    ⏳estimate: 12~13 /25

    View Slide

  66. Τϥʔ͕࣍ͷʮ૝ఆ֎ʯʮᐆດʯΛݺͿ
    (
    )

    [ग़య]

    ᴷAndreas Zeller, தా लج, ࠓా ণ޺, େؠ ঘ޺, ஛ా ߳බ, ٶݪ ٱඒࢠ, फܗ ࣿ৫

    σόοάͷཧ࿦ͱ࣮ફ ―ͳͥϓϩάϥϜ͸͏·͘ಈ͔ͳ͍ͷ͔ P3 - P4

    View Slide

  67. όά͸ʮൟ৩ʯ͢Δ
    1 1

    [ग़య]

    ᴷ Shore, James, Warden, Shane, ฏು ݈ࣇ, ໦Լ ࢙඙, ࡫Ҫ ਸ࢘

    ΞʔτɾΦϒɾΞδϟΠϧσϕϩοϓϝϯτ : ૊৫Λ੒ޭʹಋ͘ΤΫετϦʔϜϓϩάϥϛϯά P169

    View Slide

  68. Τϥʔ͕ڭ͑ͯ͘ΕΔ͜ͱɾ͘Εͳ͍͜ͱ


    ⏳estimate: 13~14 /25

    View Slide

  69. ͖ͬ͞ͷίʔυ: Կ͕ਖ਼͍͠ʁ

    $taxRate
    1.8
    fl
    oat
    0.8
    fl
    oat
    80(%) int
    ⏳estimate: 13~14 /25

    View Slide

  70. ผͷྫ: ߏจΤϥʔ
    ( )
    7 if{}
    if {} 🤮

    ⏳estimate: 13~14 /25

    View Slide

  71. ผͷྫ: ߏจΤϥʔɺ͜ΕͩͬͨΒͲ͏ݟ͑Δʁ
    class{}

    View Slide

  72. ผͷྫ: ߏจΤϥʔɺݟͨ໨ͰมΘΒͳ͍҆৺ײ

    ⏳estimate: 14 /25

    View Slide

  73. Τϥʔͱ஥ྑ͘ͳΔʹ͸
    PRO

    ⏳estimate: 14~15 /25

    View Slide

  74. Τϥʔ͸ఢ͡Όͳ͍ɺ༑ୡͳΜͩʂʂ →ͦͷ৺͸ʁ

    ⏳estimate: 15~16 /25

    View Slide

  75. Τϥʔͱ஥ྑ͘ͳΔͨΊͷίπ΋௫Έ·͠ΐ͏ʂ

    ( )
    =
    ( )

    ⏳estimate: 16 /25

    View Slide

  76. §5
    PHP

    View Slide

  77. §5 PHP
    .1
    .2
    ⏳estimate: 16~17 /25

    View Slide

  78. ϓϩάϥϛϯάʹͱͬͯΤϥʔ͸ॏཁ

    ⏳estimate: 16~17 /25

    View Slide

  79. PHP͸Ͳ͏͖ͯͨ͠ʁˠΑ͘࿩୊ʹͳΔ΍ͭ
    PHP5 -> PHP7
    Throwable/Error
    E_STRICT : E_NOTICE, E_WARNING, E_DEPRECATED
    PHP7 -> PHP8
    warning -> Error
    PHP8 -> PHP9
    Error (8.2 Deprecated)
    Error

    View Slide

  80. ᐆດ͞ͱͷઓ͍
    PHP

    ⏳estimate: 17~18 /25

    View Slide

  81. ᐆດ͞ͱͷઓ͍
    E_WARNING/E_NOTICE Error throw
    E_NOTICE (7.4 )
    E_NOTICE php.ini these are warnings
    which often result from a bug in your code, but it's possible
    that it was intentional

    ⏳estimate: 17~18 /25

    View Slide

  82. php-src grep
    7.x NOTICE
    WARNING
    8.x
    WARNING
    E_NOTICE/

    E_WARNINGͷग़ݱ਺
    git --no-pager grep E_NOTICE -- 'ext/**/*.c' | wc -l

    View Slide

  83. RFCͳͲ
    PHP: rfc:engine_warnings

    https://wiki.php.net/rfc/engine_warnings
    PHP: rfc:consistent_type_errors

    https://wiki.php.net/rfc/consistent_type_errors
    Pull requests · php/php-src

    https://github.com/php/php-src/pulls?q=label%3A%22Warning+promotion%22
    PHP: rfc:unde
    fi
    ned_property_error_promotion

    https://wiki.php.net/rfc/unde
    fi
    ned_property_error_promotion
    PHP: rfc:unde
    fi
    ned_variable_error_promotion

    https://wiki.php.net/rfc/unde
    fi
    ned_variable_error_promotion

    View Slide

  84. §5 PHP
    .1
    .2

    View Slide

  85. ͜Ε͔ΒͲ͏ͳΓͦ͏ʁ
    NOTICE

    PHP
    Error WARNING
    (DEPRECATED )
    TypeError/ValueError

    View Slide

  86. ͜Ε͔ΒͲ͏͍ͯ͘͠ʁ
    PHP7.0

    ⏳estimate: 20 /25

    View Slide

  87. ͜Ε͔ΒͲ͏͍ͯ͘͠ʁ
    E_NOTICE/E_WARNING
    (`===` strict )
    PHPStan Psalm
    PHP

    ⏳estimate: 21 /25

    View Slide

  88. View Slide

  89. Τϥʔͱ্ख͘෇͖߹͏ͱɺ೉͕͠͞ݮΔ
    PHP


    ⏳estimate: 21~22 /25

    View Slide

  90. View Slide

  91. ͓͠·͍ʂ
    ͓෇͖߹͍͍͖ͨͩ

    ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide