Share
Embed
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
2024/08/28 第167回 PHP勉強会@東京のトークで使用したスライドです
02
August 28, 2024
Transcript
15 slides
-
© 2012-2024 BASE, Inc. #phpstudy BASE, Inc. BASE BANK 出金Devチーム
Engineering Program Manager / フルサイクルエンジニア PHPカンファレンス2024 実行委員長 2024/12/22(日)開催デス! 02 大津 和槻(おおつ かずき) :@cocoeyes02 自己紹介 -
© 2012-2024 BASE, Inc. #phpstudy 時間切れが怖いので募集なう! バックエンド エンジニア SRE フロントエンド
エンジニア セキュリティ エンジニア QA エンジニア データ エンジニア etc… We are hiring! https://binc.jp/jobs -
© 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) {...} -
© 2012-2024 BASE, Inc. #phpstudy RFCの概要 7 PHP8.4でdeprecated、PHP9.0でエラーになります。 8.4以上はnullableかunion型を使って、明示的にnullableを表現しましょう //
NG function foo(int $var = null) {...} // OK function foo(?int $var = null){...} function foo(int|null $var = null) {...} -
© 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 -
© 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構文) -
© 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を型で表現できるように -
© 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を型で表現できるように -
© 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) {...} -
© 2012-2024 BASE, Inc. #phpstudy まとめ 14 • 型でnullableを表現しない状態でデフォルト値にnullを代入ができなくなる ◦
PHP8.4でdeprecated ◦ PHP9.0でエラー • 一見「なぜこんな仕様が今まであったのか?」と思えるものでも、歴史的な経緯に よる理由がある • ?T構文やT|nullを使って型をnull許容するか、ツールで一括修正しましょう -
© 2012-2024 BASE, Inc. #phpstudy 宣伝 15 PHPカンファレンス2024のCfPを公開しました! もっとPHPに詳しくなりたいあなたも、PHPに詳しいあなたもぜひプロポーザルお待ち しております!
https://fortee.jp/phpcon-2024/speaker/proposal/cfp