LoginSignup
2
1

PHP 8.3の新規機能と改善

Last updated at Posted at 2024-04-24

image.png

この記事について

PHPは、毎年新しいメジャーまたはマイナーバージョンのリリースを続け、2023年11月23日に新たにPHP8.3がリリースされました。この新バージョンは、多くの新機能と改善を加え、PHPの汎用性と進化する言語としての地位をさらに固めています。

この記事では、PHP8.3に導入された注目すべき新機能を紹介します。

新機能

クラス定数の型付け

クラス定数に型をかけるようになりました。


// valid 
class TestClass {
    const string MY_TEXT = 'my text';
}

// valid 
interface TestInterface {
    const string MY_TEXT = 'my text';
}

// valid 
trait TestTrait {
    const string MY_TEXT = 'my text';
}

// valid 
enum TestEnum {
    const string MY_TEXT = 'my text';
}
// invalid 
// この初期宣言では型と値が一致しません。
class TestClass {
    const string MY_TEXT = 123;
}
class TestClass {
    const string VERSION = "PHP 8.2";
}

class MyTestClass extends TestClass {

    // valid
    // ここでVERSIONの値を変更しても問題ありません。
    const string VERSION = "PHP 8.3";

    // invalid
    // 親クラスで指定された場合は型を宣言する必要があります。
    const VERSION = "PHP 8.3";

    // invalid
    // この場合、親クラスで宣言された型を変更することはできません。
    // 新しい型とその値が互換性がある場合でもです。
    const float VERSION = 8.3;
}

json_validate関数

PHP8.3は、新しい関数json_validate()を導入しています。この関数は、JSONデータが構文的に正しいかどうかを確認するため、それを配列やオブジェクトに変換する必要がなく、以前このプロセスで使用されていたメモリを節約します。


// PHP <= v8.2.0

$maybeJSON = '';

$obj = json_decode($maybeJSON);

if (json_last_error() === JSON_ERROR_NONE) {
    // Probably do something with $obj   
}

// PHP >= v8.3.0
var_dump(json_validate('{ "test": "test" }')); // true
var_dump(json_validate('{ "test": "test }')); // false

クラス定数の動的なアクセスができる

PHP

PHP8.3からは、クラスから定数を動的にアクセスすることができるようになりました。


class Framework {
    const NAME = 'Laravel';
}

$name = 'NAME';

// PHP <= v8.2.0で構文エラー
echo Framework::{$name}; // Laravel


こちらの新機能について詳しく知るために、PHP8.3の前後の例が載っているPHP8.3リリースアナウンスメントページをチェックしてください。また、廃止予定の機能や後方互換性の破壊も確認してください。


本記事についてのご感想をお聞かせください。読者の皆様の意見を反映させて、今度の内容改善につなげたいと考えております。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1