PHP7.4がリリースされました。警告回りが強化され色々あるようですが、目先で気になるのは新規機能です。
PHP: Migrating from PHP 7.3.x to PHP 7.4.x – Manual
気になった使い勝手の良さそうな機能は以下です。実コードとコメントで紹介します。
/** * JavasScript的な関数の作り方. ワンライナーでここまでできる * @see https://www.php.net/manual/ja/migration74.new-features.php#migration74.new-features.core.arrow-functions */ Route::get('/', fn() => view('welcome')); class Hoge { /** * プロパティに型を付けられるようになりました。 * @see https://www.php.net/manual/ja/migration74.new-features.php#migration74.new-features.core.typed-properties */ public int $b = 42; } Route::get('/tp', static function (){ $hoge = new Hoge(); $hoge->b = '13'; // NOT ERROR. '13' に暗黙の型変換が働いて 13 になります echo $hoge->b; $hoge->b = 'hgoegheo'; // ERROR. 型が変換できないものを代入できません }); Route::get('ncao', static function () { /** * @see https://www.php.net/manual/ja/migration74.new-features.php#migration74.new-features.core.null-coalescing-assignment-operator * ??= は左辺がnullか未定義ならば代入を行う演算子です. * デフォルト値的に使うことが多そうです. * $a ??= 'default_value'; と * $a = $a ?? 'default_value'; と * if(! isset($a)){ * $a = 'default_value'; * } * は等価です. */ $a = [ 'abc' => 'xyz', 'def' => null, ]; $a['abc'] ??= 'hoge'; $a['def'] ??= 'fuga'; $a['ghi'] ??= 'foobar'; dump($a); /* [ "abc" => "xyz" "def" => "fuga" "ghi" => "foobar" ] */ }); /** * 区切り文字を入れた数字表現が追加されました * @see https://www.php.net/manual/ja/migration74.new-features.php#migration74.new-features.core.numeric-literal-separator */ Route::get('nls', fn() => dump(299_792_458 === 299792458)); // true /** * 可変引数的な展開が配列でもできるようになりました * @see https://www.php.net/manual/ja/migration74.new-features.php#migration74.new-features.core.unpack-inside-array */ Route::get('uia', static function () { $parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; dump($fruits); // ['banana', 'orange', 'apple', 'pear', 'watermelon'] });
新規機能外でうれしく思うのは、ネストされた括弧なし三項演算子の非推奨化、です。PHPの三項演算子は他言語と比べてマイナーな処理順のため括弧抜きではいちいち確かめが面倒でした。