この記事について
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リリースアナウンスメントページをチェックしてください。また、廃止予定の機能や後方互換性の破壊も確認してください。
本記事についてのご感想をお聞かせください。読者の皆様の意見を反映させて、今度の内容改善につなげたいと考えております。