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の三項演算子は他言語と比べてマイナーな処理順のため括弧抜きではいちいち確かめが面倒でした。