9月27日、PHPチームはPHP 8.4の最初のリリース候補(Release Candidate 1)を公開した。PHP 8.4の正式版(GA)は2024年11月21日に予定されており、現在はリリース候補段階である。この段階で、新機能を確認し、バージョンアップに備えることが推奨されている。
PHP 8.4は、いくつかの新しい機能が追加されており、その一部は開発者にとって非常に魅力的な改良である。以下は、PHP 8.4における主な新機能の概要と、それに対応するサンプルコードである。
1. request_parse_body()
関数の追加
PHP 8.4では、request_parse_body()
という新しい関数が追加された。この関数は、RFC1867(multipart)リクエストをPOST以外のHTTPメソッドでも解析することができる。
// PHP 8.4から追加されたrequest_parse_body()関数の使用例
$request = "PUT /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary";
$body = file_get_contents('php://input');
// 非POSTリクエストでもマルチパートボディを解析する
$parsedBody = request_parse_body($body);
var_dump($parsedBody);
2. クラスのインスタンス化時の括弧省略
PHP 8.4では、クラスのインスタンス化時に括弧を省略できるようになった。引数を取らないコンストラクタを持つクラスに対して、シンプルにインスタンス化が可能である。
// PHP 8.4以前
class Example {
public function __construct() {
echo "Example instantiated";
}
}
$instance = new Example(); // 括弧が必要
// PHP 8.4以降
$instance = new Example; // 括弧が不要
class Request implements Psr\Http\Message\RequestInterface
{
// ...
}
// PHP 8.4以前は、new Request()をカッコで囲む必要があった
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
// 以前はエラーだったが、8.4以降はOK
$request = new Request()->withMethod('GET')->withUri('/hello-world');
3. #[Deprecated]
属性の追加
PHP 8.4では、非推奨のメソッドやプロパティを明示的に示すための#[Deprecated]
属性が導入された。これにより、将来的に削除される機能を警告することができる。
class MyClass {
#[\Deprecated("This method will be removed in future versions.", since: "2.4")]
public function oldMethod() {
}
}
$myClass = new MyClass();
$myClass->oldMethod(); // 実行すると非推奨警告が出る
4. プロパティフックの導入
PHP 8.4では、プロパティにアクセスする際に動作を動的に変更するためのプロパティフック機能が導入された。これにより、プロパティへのアクセス時にカスタムロジックを簡単に追加できる。
class User implements Named
{
private bool $isModified = false;
public function __construct(
private string $first,
private string $last
) {}
public string $fullName {
// 読み取り時に処理を追加
// 姓と名を結合して返す
get => $this->first . " " . $this->last;
// プロパティ書き込み時に処理を追加
// 姓と名に分割してfirstとlastに代入
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}
$obj = new User();
$obj->fullName = "Shumpei Shiraishi"; // フルネームを設定
echo $obj->first; // Shumpei
echo $obj->last; // Shiraishi
5. 非対称なプロパティ可視性
PHP 8.4では、プロパティの読み取りと書き込みに対して異なる可視性を設定することが可能になった。これにより、セキュアなデータ管理がより柔軟にできる。
class Foo
{
public private(set) string $bar = 'baz';
}
$foo = new Foo();
var_dump($foo->bar); // prints "baz"
$foo->bar = 'beep'; // 書き込みはエラー
6. Lazyオブジェクト
PHP 8.4では、遅延オブジェクトという、新しいオブジェクトが初期化されるタイミングを遅延させる機能が追加された。これにより、不要なオブジェクトの初期化を防ぎ、パフォーマンスを向上させることができる。
7. http_get_last_response_headers()
関数の追加
HTTPリクエストにおいて、レスポンスヘッダーの情報を取得するためのhttp_get_last_response_headers()
関数が追加された。これにより、HTTP通信のトラブルシューティングが簡単になる。
8. fpow()
関数の追加
新しく追加されたfpow()
関数は、浮動小数点のべき乗計算をIEEE 754規則に従って行う。この関数は高精度の数値計算が求められる場面で便利である。
// fpow() 関数を使用してべき乗計算を行う
$result = fpow(2.0, 3.0); // 2の3乗
echo $result; // 出力: 8
9. 新しい配列検索メソッドの追加
PHP 8.4では、配列内の要素を検索するための新しいメソッドが追加された。これにより、配列操作がより効率的になる。
$array = [1, 2, 3, 4, 5];
// 新しい配列検索メソッド
$found = array_find($array, fn($value) => $value > 3);
echo $found; // 出力: 4
リリーススケジュール
PHP 8.4はベータ版を終え、リリース候補フェーズに移行している。GAリリースは2024年11月21日に予定されており、開発者はこのバージョンを使い始め、余計な括弧を削除することでコードが簡潔になることが期待されている。
リリースタイムラインはPHP 8.4準備タスクページで確認できる。
詳細は[[PHP 8.4 Release Candidate 1 is here](https://laravel-news.com/php-8