はじめに
PHPは、この11月にバージョン8.4となりました。前バージョンである8.3からほぼ1年ぶりのリリースになります。PHPは、導入のしやすさと使い勝手の良さでリリース当時から人気があり、バージョンアップのたびに洗練と使い勝手の向上を目指した機能が多数実装され、改良されています。本連載ではPHPの最新バージョンにフォーカスし、その強化・変更ポイントを紹介していきます。
| 分類 | 機能 | 概要 | 
|---|---|---|
| クラス定義 | プロパティフック | プロパティに直接ゲッタ/セッタを記述できるように(とパフォーマンスの改善) | 
| 非対称可視性 | ゲッタとセッタに異なる可視性を指定可能に | |
| 遅延初期化 | 必要時にインスタンス化を実行するように | |
| 言語仕様 | 非推奨属性 | 関数、メソッド、クラス定数などに非推奨の指定が可能に | 
| カッコなしのメソッドチェーン | インスタンス生成からメソッドをチェーンする際にカッコを省略可能に | |
| 暗黙のnullable型の非推奨化 | nullable型の明示的な指定が必要に | |
| 0のマイナス乗の動作変更 | 0をマイナス乗したときの挙動をエラーに | |
| 関数 | round関数の丸めモード | 丸めモードの指定を定数からEnumに(とその追加) | 
| 型付き引数のデフォルトnullの禁止 | 型のある引数のデフォルト値にnullを指定できないように | |
| BCMathの丸め関数 | 任意精度演算ライブラリBCMathで3種類の丸め関数を利用可能に | |
| GMPクラスのfinal化 | GMPクラスをfinal化して継承できないように | |
| 絵文字分割関数 | 絵文字を正しく分割できるgrapheme_str_split関数を利用可能に | |
| マルチバイト版関数 | マルチバイト対応のtrim関数、ltrim関数、rtrim関数、ucfirst関数、lcfirst関数を使えるように | |
| レスポンスヘッダ取得関数 | HTTPレスポンスヘッダを取得するhttp_get_last_response_header関数を使えるように | |
| リクエストボディ取得関数 | リクエストボディを取得するrequest_parse_body関数を使えるように | |
| BCryptのコストの既定値変更 | BCryptの計算コストの既定値を12に変更しより安全に | |
| fpow関数 | fmodに対応する算術演算関数fpowを利用可能に | |
| 配列検索関数 | array_find関数などにより配列の検索がより便利に | |
| データベース | PDOドライバのサブクラス化 | PDOドライバにサブクラスが追加されることでDB固有の機能を呼び出し可能に | 
| SQLドライバごとのパーサ | データベースドライバごとにSQLパーサを実装 | |
| HTML/DOM | HTML5対応のパーサ | Lexborを使用したクラス\DOM\HTMLDocumentでHTML5のパースが可能に | 
| DOM対応の修正 | Living Standard準拠のDOM対応の修正 | |
| DOMのための関数 | 新しい関数querySelector、closest、matchesが利用可能に | |
| 巨大ファイルの拒絶 | xml_parse関数にXML_OPTION_PARSE_HUGEを指定して巨大なファイルの入力を拒絶可能に | |
| DOMXPathの改善 | XPath式内でのコールバックサポートを改善して任意のCallableを利用可能に | |
| ストリーム読み書きメソッド | XMLReaderおよびXMLWriterにストリーム読み書きのためのメソッドfromStream、toStreamが追加 | |
| StreamBucketクラス | ストリームフィルタのためのクラスStreamBucketを利用可能に | |
| 処理系 | 新しいJITコンパイラ | 中間表現を用いた新たなJITコンパイラの実装でコンパイルと実行がより高速に | 
| JIT無効化の簡便化 | JITを無効化する際の設定がより簡便に | |
| 問題のある機能のアンバンドル化 | imap、pspell、oci8などの拡張機能をバンドルから除外 | 
対象読者
- PHPの最新バージョンの機能を把握したい方
- PHPの経験者で、PHPに改めて入門したい方
- プログラミング言語の最新パラダイムに関心のある方
必要な環境
本記事のサンプルコードは、以下の環境で動作を確認しています。
- 
  macOS Sonoma / Windows 11 Pro 23H2
  - PHP(8.4.1)
- Visual Studio Code 1.95.3(PHP Extension Pack 1.0.3)
 
[NOTE]サンプルの実行
掲載サンプルは、それぞれの.phpファイルに記述されています。動作確認は、PHP 8.4.1をHomebrewでインストールしたmacOS上で、拡張機能「PHP Extension Pack」をインストールしたVSCode(Visual Studio Code)のデバッグコンソールに出力させることで行っています。

 
              
               
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                              
                               
                              
                               
                              
                               
                              
                               
                              
                               
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
															
														 
															
														 
    .png) 
     
     
     
     
													 
													 
													 
													 
													 
										
									
 
 
                     
                    