236 Views
August 20, 26
スライド概要
関西PHP勉強会 2026/08/20 の発表スライド
PHP 8.6 に備えよう! 非推奨になる機能たち 関西PHP勉強会 takaram (@takaram71)
自己紹介 ● 荒巻拓哉 ● X: @takaram71 GitHub: @takaram ● バックエンドエンジニア @株式会社 ラクス ○ 問い合わせ自動応対システムの 開発
みなさん
PHPのバージョンアップ してますか?
PHPは毎年11月下旬ごろリリース https://www.php.net/supported-versions.php
PHPバージョンアップの強い味方
https://www.php.net/manual/ja/migration85.php
機能の非推奨化 ● バージョン2桁目が上がるごとに、いくつかの機能が非推奨 になる ● バージョン1桁目が上がるときに、非推奨機能が削除される ● RFCでの提案→投票で決まる
PHP 8.6ではどんな機能が 非推奨になる?
RFC: Deprecations for PHP 8.6 https://wiki.php.net/rfc/deprecations_php_8_6 ● 35項目を個別に投票 ● 31項目が可決 ● 原則、PHP 8.6で非推奨 → PHP 9で削除予定
大きく分けて4パターン ● ● ● ● 将来の構文のための名前予約 暗黙・矛盾した挙動の廃止 重複・不要なAPIの整理 古い・不安定な機能の整理
将来の構文のための名前予約 ● let, namespace, readonly, is, _ ● クラス、インターフェース、trait、enum、関数、定数の名前 としての利用 ○ 関数名 _ だけは対象外 ○ https://www.php.net/_
オブジェクトを配列として渡す ● 一部の関数は、連想配列の代わりにオブジェクトを受け取れ ていた ○ array_walk() / array_walk_recursive() ○ mb_convert_variables() ○ deflate_init() / inflate_init()、各種圧縮フィル ター ○ 公開プロパティを暗黙に配列として扱う ● 一部のケースでおかしな挙動をする ● そもそも誰も使ってない
例外やバグを隠す呼び出し ● finally ブロックからの return ● is_a() / is_subclass_of() の矛盾した引数 ○ 文字列を禁止しているのに文字列を渡す
重複・不要なAPIを整理 ● 型名の古い別名 ○ is_double()、is_integer()、is_long()、 doubleval() ● define() の第3引数 $case_insensitive ● spl_classes()、spl_object_hash() ● ArrayIteratorがArrayObjectから継承したメソッド
専門的・古いAPI ● strcoll() と SORT_LOCALE_STRING ○ Collatorへ ● ● ● ● metaphone() mysqli::stmt_init() / mysqli_stmt_init() mysqli_get_charset() 不完全なセッション保存ハンドラー
SplFileObjectのCSVメソッド ● 以下の4メソッドが非推奨に ○ ○ ○ ○ SplFileObject::fgetcsv() SplFileObject::fputcsv() SplFileObject::setCsvControl() SplFileObject::getCsvControl() ● 関数のfgetcsv(), fputcsv()は残る
まとめ ● 毎バージョンいろんな機能が非推奨になっている ● 新たにこれらの機能を使わないように
補足スライド
否決された項目 ● ● ● ● list() 構文 in / out / inout を識別子に使うこと _() 関数名(gettext()の別名) dechunk ストリームフィルター
非推奨になるものをCIで検知 ● PHPStanなどに一部の非推奨の書き方を検知するルール がある ○ PHP 8.5から非推奨の(double)が検知される例 ○ phpstan.neon のphpVersionに依存するので注意