つい先日transaction処理を書いていて、transactionで囲っている範囲から値を返すときのタイプヒントをどうすればいいんだっけ...?
となったので、その時のことを書いてみます。
やりたいこと
Laravelを書いていると頻繁に必要になってくるDBトランザクション...
データベースの整合性を保つために使われますね。
場合によってはuseもついてたりしますが、基本的な文法はこんな感じです。
DB::transaction(function () {
// DBの操作
});
ここまではよかったんですよ。
DB::transactionは値を返すことができて、こんな感じに書くことができます。
$huga = DB::transaction(function () use ($hoge) {
$huga = $hoge;
// DBの操作
return $huga;
});
dd($hoge) // 'hello'
値を返すためにやることは簡単です。
DBトランザクションの中で返したい値をreturnしてあげればOKです。
で!
ここで返り値の型宣言を書きたかったわけです。
DBトランザクションで返り値に型定義を書く
結局...
$huga = DB::transaction(function () use ($hoge): string {
$huga = $hoge;
// DBの操作
return $huga;
});
useの"()"の右でした。
($hoge): string
ここの: string
がタイプヒントですね。
試してはいませんが、useがない場合でもfunctionの後の"()"の右に書けば大丈夫だと思います。
まとめ
普段関数につける時は全然悩まないですが...
DBトランザクションだし、useあるし...
と悩ましくて調べても以外とわからなかった...(普通の人はピンとくるものなんだろうか...w
でも今回を機にしっかり覚えておこうかなと思います。