萌えハッカーニュースリーダー

2025/11/20 19:11 PHP 8.5 Released

出典: https://www.php.net/releases/8.5/en.php
hakase
博士

ロボ子、PHP 8.5がリリースされたのじゃ!2025年11月20日じゃぞ!

roboko
ロボ子

ついに来ましたね、博士!どんな新機能があるんですか?

hakase
博士

URI拡張、パイプ演算子、clone withのサポートじゃ!URI拡張はRFC 3986とWHATWG URL標準に準拠しておる。

roboko
ロボ子

URIの解析や正規化がより厳密になるんですね。パイプ演算子というのは、関数を繋げるものですか?

hakase
博士

そうじゃ!パイプ演算子 `|>` を使うと、中間変数なしで関数呼び出しを左から右へ連鎖させられるのじゃ!例えば、`$value |> functionA |> functionB` みたいな感じじゃな。

roboko
ロボ子

コードがすっきりしますね!`clone with` はオブジェクトの複製時にプロパティを更新できる機能ですね。

hakase
博士

`clone()`関数でプロパティを更新してオブジェクトを複製できるのじゃ。便利じゃろ?

roboko
ロボ子

はい、オブジェクトの状態を少しだけ変えたい時に役立ちそうです。`#[\NoDiscard]`属性というのは?

hakase
博士

戻り値が使用されない場合に警告を発する属性じゃ。`#[\NoDiscard]`属性は、戻り値が使用されない場合に警告を発するのじゃ。

roboko
ロボ子

それは、意図しない処理結果の無視を防ぐのに役立ちますね。他にも何かありますか?

hakase
博士

静的クロージャとfirst-class callableが定数式で使用可能になったり、cURL shareハンドルが複数のPHPリクエスト間で永続化されるようになったりじゃな。

roboko
ロボ子

cURL shareハンドルが永続化されるのはパフォーマンス向上に繋がりそうですね。`array_first()`と`array_last()`関数も追加されたんですね。

hakase
博士

`array_first()`と`array_last()`関数が追加され、それぞれ配列の最初と最後の値を返すのじゃ。

roboko
ロボ子

配列操作が少し楽になりますね。Fatal Errorにバックトレースが含まれるようになったのもデバッグに役立ちそうです。

hakase
博士

そうじゃな。それから、属性が定数をターゲットにできるようになったり、`#[\Override]`属性をプロパティに適用できるようになったり、`#[\Deprecated]`属性をtraitと定数に使用できるようになったりじゃ。

roboko
ロボ子

`#[\Override]`属性をプロパティに適用できるのは、オーバーライドの意図を明確にするのに役立ちますね。

hakase
博士

静的プロパティが非対称な可視性をサポートしたり、コンストラクタプロパティの昇格を使用して、プロパティをfinalとしてマークできるようになったりもするぞ。

roboko
ロボ子

より細かいアクセス制御ができるようになるんですね。匿名関数での再帰を簡素化する`Closure::getCurrent()`メソッドも追加されたんですね。

hakase
博士

`setcookie()`と`setrawcookie()`が"partitioned"キーをサポートしたり、`get_error_handler()`と`get_exception_handler()`関数が追加されたりもするのじゃ。

roboko
ロボ子

cookieの扱いが少し変わるんですね。エラーハンドリングも改善されるのは良いことです。

hakase
博士

`Dom\Element::getElementsByClassName()`と`Dom\Element::insertAdjacentHTML()`メソッドが利用可能になったり、`grapheme_levenshtein()`関数が追加されたりもするぞ。

roboko
ロボ子

DOM操作や文字列処理も強化されたんですね。`#[\DelayedTargetValidation]`属性は何に使うんですか?

hakase
博士

`#[\DelayedTargetValidation]`属性を使用して、無効なターゲットで使用されているコアおよび拡張属性からのコンパイル時エラーを抑制できるようになったのじゃ。

roboko
ロボ子

エラーの抑制ですか。少し注意が必要そうですね。非推奨になった機能もあるんですね。

hakase
博士

バッククォート演算子(`shell_exec()`のエイリアス)や、非正規のキャスト名`(boolean)`、`(integer)`、`(double)`が非推奨になったのじゃ。それぞれ`(bool)`、`(int)`、`(float)`を使う必要があるぞ。

roboko
ロボ子

キャスト名は短い方がタイプしやすいですね。`disable_classes` INI設定も削除されたんですね。

hakase
博士

`case`ステートメントをコロンではなくセミコロンで終了させることが非推奨になったり、`null`を配列オフセットとして使用したり、`array_key_exists()`を呼び出すときに使用することが非推奨になったりもするのじゃ。

roboko
ロボ子

細かい部分も色々変わるんですね。`class_alias()`で"array"と"callable"をクラスエイリアス名として使用できなくなったんですね。

hakase
博士

`__sleep()`と`__wakeup()`マジックメソッドがソフトデプリケートされ、`__serialize()`と`__unserialize()`を使用する必要があるのじゃ。

roboko
ロボ子

シリアライズ処理も変わるんですね。`NAN`を他の型にキャストすると警告が表示されるようになったんですね。

hakase
博士

`[]`または`list()`を使用して配列以外の値(`null`を除く)をデストラクトすると警告が表示されるようになったり、float(またはfloatのように見える文字列)を`int`にキャストして表現できない場合に警告が表示されるようになったりもするのじゃ。

roboko
ロボ子

型に関する警告が増えましたね。より安全なコードを書くように促されているんですね。

hakase
博士

そう言うことじゃ!今回のアップデートも盛りだくさんじゃったな!

roboko
ロボ子

はい、博士!色々と勉強になりました!

hakase
博士

ところでロボ子、PHPって何の略か知ってるか?

roboko
ロボ子

PHP: Hypertext Preprocessor ですよね?

hakase
博士

ブー!正解は… "PHP is Hypertext Preprocessor" なのじゃ!PHPの中にPHPが…って、トートロジーじゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search