3

ショートハンドのifステートメントがわからないので少し問題があります

($product == "vindo") ? $this->getNextVindoInList($id) : $this->getNextGandrupInList($id),

これは正常に機能しますが、そのステートメントで別のチェックを行いたいと思います。このような:

if($product == "vindo") {
  if($number != 14) {
    $this->getNextVindoInList($id)
  }
} else {
 if($number != 22) {
    $this->getNextGandrupInList($id)
 }
}
4

4 に答える 4

13

教育目的のために、私はこの答えをそのままにしておきます。ただし、これは推奨されないことを知っておく必要があります。ターナリをネストすることは悪い考えです。明示的なif-elseステートメントに比べてパフォーマンス上の利点はなく、コードがはるかに読みにくくなります。

とはいえ、それがどのようにできるかについては以下を参照してくださいが、実行すべきではありません


ふたつのやり方:

($product == "vindo" && $number != 14 ? $this->getNextVindoInList($id) : ($number != 22 ? $this->getNextGandrupInList($id) : '')

// Equivalent of:
if ($product == "vindo" && $number != 14)
    $this->getNextVindoInList($id);
else if ($number != 22)
    $this->getNextGandrupInList($id);

// OR

// Equivalent of your example:
($product == "vindo" ? ($number != 14 ? $this->getNextVindoInList($id) : '') : ($number != 22 ? $this->getNextGandrupInList($id) : ''))
于 2012-09-20T12:40:14.750 に答える
3

これを試して!

($product == "vindo") ? ($number != 14 ? $this->getNextVindoInList($id) : null ) : (($number != 22) ? $this->getNextGandrupInList($id) : null)
于 2012-09-20T12:38:17.863 に答える
2

ネストされた三項演算子を使用したソリューションは提示しません。なんで?明示的なif/else構造を持つコードは、意図を伝えます。それは正確に何が起こっているかを示しています。

なぜ数行の読みやすさを犠牲にするのですか?それはかなり悪い取引です。

于 2012-09-20T12:51:59.950 に答える
1

次のコードを使用すると、ifステートメントを簡略化できます。

if($product == "vindo" && $number != 14) {
  $this->getNextVindoInList($id)
} else if($number != 22) {
  $this->getNextGandrupInList($id)
}

elseにはifステートメントもあるため、sorthandifは現在便利ではありません。

于 2012-09-20T12:47:00.737 に答える