TL; DRは:when
syntactic sugar関数はより少しです。それは通常の条件文よりも効率的ではなく、おそらくそれほど効率的ではありません。
のはwhen
method's source codeを見てみましょう:
public function when($value, $callback)
{
$builder = $this;
if ($value) {
$builder = call_user_func($callback, $builder);
}
return $builder;
}
あなたが見ることができるように、when
方法がif (<your conditional>)
とは異なる何かをして、あなたから供給されるコールバック関数を呼び出していません。
単純な条件付きの例とまったく同じであるため、より効率的です。効率的です。おそらく、2つの追加のメソッド呼び出しを必要とするため、おそらくほんの僅かしか効率が悪くなりますが、パフォーマンスの面での影響は心配しません。効率性が懸念される場合は、両方の実装をプロファイルし、ボトルネックであることが判明した場合にのみ最適化する必要があります。
when
関数の実際の理由は、syntactic sugarです。それはあなたが条件付きでQueryBuilder
の流れるようなインターフェイスを壊すことなく、クエリに新しい制約を追加することができます:
$q = $q
->when(isset($foo), function() use ($foo) { return $q->where('foo', $foo); })
->when(isset($bar), function() use ($bar) { return $q->where('bar', $bar); })
->when(isset($baz), function() use ($baz) { return $q->where('baz', $baz); });
これは良く読めることを証明する(またはしない場合があります特定の状況では
if (isset($foo)) {
$q = $q->where('foo', $foo);
}
if (isset($bar)) {
// ...
とは対照的に)。結局のところ、when()
を使うのか、単純な条件式を使うのかは、個人的な好みに過ぎません。
うわー、今それは答えです。どうもありがとうございます。文法的な砂糖について知りませんでした。ところで、TL; DRはどういう意味ですか?質問を間違った形式で投稿しましたか?私はここで新しいことをやっています。 –
お寄せいただきありがとうございます。また、StackOverflowへようこそ! TL; DRは*が長すぎることを意味します。 *を読んでいないし、長いanwserへの短い要約の接頭辞としてよく使われます。 – helmbert