2月3日、Laravel 11に導入された once()
というヘルパー関数に関する解説記事がLaravel Newsに投稿された。
この新しいヘルパーは、 オブジェクトメソッドの呼び出し回数に関係なく、常に同じ値を得ることを保証 する。主に一度だけ実行されるべきコードがある場合、非常に便利である。
以下に、 once()
を利用したコード例を示す。
<?php
namespace App;
use Illuminate\Support\Str;
use Ramsey\Uuid\UuidInterface;
class OnceDemo
{
public function uuid(): UuidInterface
{
return Str::uuid();
}
public function uuidOnce(): UuidInterface
{
return once(fn (): UuidInterface => $this->uuid());
}
}
OnceDemo
クラスには2つのメソッドが定義されており、 uuid()
は呼び出すたびに新しいUUIDを生成して返すが、 uuidOnce()
は常に同じ値を返す。
$demo = new App\OnceDemo;
foreach (range(1,5) as $_) {
echo $demo->uuidOnce() . "\n";
/*
5cdfa44b-5ae5-4b0f-8a6f-4b167307fa05
5cdfa44b-5ae5-4b0f-8a6f-4b167307fa05
5cdfa44b-5ae5-4b0f-8a6f-4b167307fa05
5cdfa44b-5ae5-4b0f-8a6f-4b167307fa05
5cdfa44b-5ae5-4b0f-8a6f-4b167307fa05
*/
}
まとめ
Laravel 11により、開発者たちはonce()
ヘルパーを活用して、一度だけ実行されるべき処理をスマートに記述することができるようになった。
詳細はLaravel Newsの記事を参照していただきたい。