PHP8.1の新機能紹介 New in initializers

デフォルト値の初期化にnew演算子を使えるようになった。
おかげでこういうコードが書けるようになった。もちろんコンストラクタ以外でも使える。

class InitSample{
    public function __construct(protected DateTime $time = new DateTime('now',new DateTimeZone('UTC'))){
        $this->time = $time;
    }
    public function getTimeString():string{
        return $this->time->format('Y-m-d H:i:s');
    }
    public function tmpTime(DateTime $tmpTime = new DateTime('now',new DateTimeZone('UTC'))):string{
        return $tmpTime->format('Y-m-d H:i:s');
    }
}
$dt = new InitSample();// now
echo $dt->getTimeString().PHP_EOL;// 2021-12-04 10:31:10
sleep(1);
echo $dt->tmpTime().PHP_EOL;// 2021-12-04 10:31:11
echo $dt->getTimeString().PHP_EOL;// 2021-12-04 10:31:10

個人的にはstatic::$fooやstatic::FOOが使えるようになってほしいなとおもうものの、
これがあるだけでもだいぶ書きやすい。

カテゴリー: php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です