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

PHP RFC: Deprecate implicitly nullable paramete...

02
August 28, 2024

PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す

2024/08/28 第167回 PHP勉強会@東京のトークで使用したスライドです

02

August 28, 2024
Tweet

More Decks by 02

Other Decks in Technology

Transcript

  1. © 2012-2024 BASE, Inc. #phpstudy BASE, Inc. BASE BANK 出金Devチーム

    Engineering Program Manager / フルサイクルエンジニア PHPカンファレンス2024 実行委員長 2024/12/22(日)開催デス! 02 大津 和槻(おおつ かずき) :@cocoeyes02 自己紹介
  2. © 2012-2024 BASE, Inc. #phpstudy 時間切れが怖いので募集なう! バックエンド エンジニア SRE フロントエンド

    エンジニア セキュリティ エンジニア QA エンジニア データ エンジニア etc… We are hiring! https://binc.jp/jobs
  3. © 2012-2024 BASE, Inc. #phpstudy RFCの概要 6 Deprecate implicitly nullable

    parameter types 意訳「引数の型指定のうち、暗黙的な null 許容を非推奨にする」 // 8.3以前 function foo(int $var = null) {...} // OK // 8.4 // Deprecated: Implicitly marking parameter $var as nullable is deprecated, the explicit nullable type must be used instead function foo(int $var = null) {...}
  4. © 2012-2024 BASE, Inc. #phpstudy RFCの概要 8 PHP-CS-Fixer や PHP_CodeSniffer

    でも対応できそう • PHP-CS-Fixer ◦ nullable_type_declaration_for_default_null_value • PHP_CodeSniffer ◦ SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue
  5. © 2012-2024 BASE, Inc. #phpstudy なぜnullableじゃない型にnullが? 10 • PHP5.1 ◦

    引数のデフォルト値にnullを代入できる ◦ array の型指定ができる • PHP5.4 ◦ callable の型指定できる • PHP7.0 ◦ スカラー型(int, float, string, bool)の型指定ができる • PHP7.1 ◦ 引数や戻り値でのnullable指定できる(?T構文)
  6. © 2012-2024 BASE, Inc. #phpstudy なぜnullableじゃない型にnullが? 11 • PHP5.1 ◦

    引数のデフォルト値にnullを代入できる ◦ array の型指定ができる • PHP5.4 ◦ callable の型指定できる • PHP7.0 ◦ スカラー型(int, float, string, bool)の型指定ができる • PHP7.1 ◦ 引数や戻り値でのnullable指定できる(?T構文) nullableの構文がないから、型に関係なく デフォルト値にnullを使用できるように nullableを型で表現できるように
  7. © 2012-2024 BASE, Inc. #phpstudy なぜnullableじゃない型にnullが? 12 • PHP5.1 ◦

    引数のデフォルト値にnullを代入できる ◦ array の型指定ができる • PHP5.4 ◦ callable の型指定できる • PHP7.0 ◦ スカラー型(int, float, string, bool)の型指定ができる • PHP7.1 ◦ 引数や戻り値でのnullable指定できる(?T構文) PHP7.1でnullable指定出来ても、引き続き引数のデフォルト値にnullを代入できる →前提の違いによって、言語のルールに矛盾が生じてしまった nullableの構文がないから、型に関係なく デフォルト値にnullを使用できるように nullableを型で表現できるように
  8. © 2012-2024 BASE, Inc. #phpstudy なぜnullableじゃない型にnullが? 13 そして他のバグも誘発・・・次のメジャーバージョンPHP9.0に目を向けたRFCだった • PHP8.0

    ◦ デフォルト値を設定した引数の後に、デフォルト値のない引数を定義すると Deprecatedに ◦ ex. ◦ ただしnullは除く(後方互換性のため) • PHP8.1 ◦ 引数や戻り値でのnullable指定(?T構文)の場合、上記のDeprecatedが発行 されなかったので修正 • PHP8.3 ◦ union型(T|null)の場合、上記のDeprecatedが発行されなかったので修正 function foo(int $var = null, string $var) {...}
  9. © 2012-2024 BASE, Inc. #phpstudy まとめ 14 • 型でnullableを表現しない状態でデフォルト値にnullを代入ができなくなる ◦

    PHP8.4でdeprecated ◦ PHP9.0でエラー • 一見「なぜこんな仕様が今まであったのか?」と思えるものでも、歴史的な経緯に よる理由がある • ?T構文やT|nullを使って型をnull許容するか、ツールで一括修正しましょう