• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字連結中の三項演算子について)

三項演算子を使用した文字列連結のエラーについて

このQ&Aのポイント
  • 質問文章には、文字列連結の中で三項演算子を使用している部分があります。
  • 質問者は、この三項演算子を1行にまとめた場合にエラーが発生し、意図した結果が出力されないことに気づきました。
  • 質問者は、なぜエラーが発生するのかと、1行にした場合と2行に分けた場合の速度について知りたいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

三項演算子は優先順位が低いので、他の演算と合わせるときは括弧で括っておくのが無難です。 RTFM. http://www.php.net/manual/ja/language.operators.precedence.php (例) $str = 'aaaa'; $str .= $chk ? 'bbb' . 'ccc' : 'ddd' . 'eee'; ↓↓↓↓ $str = 'aaaa' . ($chk ? 'bbb' . 'ccc' : 'ddd' . 'eee'); 実行速度の違いはありません。厳密には測定誤差未満の差があると思いますが、全体の処理がけっして速くはないphpスクリプトでは問題にはなりません。速度より「ソースの読みやすさ」を優先してください。

rouningyo11
質問者

お礼

$buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '. ($cachebool ? $class.',,<a href="' : 'なし,,<a href="'); これでちゃんとした結果が得られました。 速度に違いはないのですね、二行に分けた方が分かりやすそうなのでせっかくですが辞めておきます。すっきりしました、ありがとうございました。

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

$buffer .= (',,'.$key.' 数: '.$value[0]['length'].' クラス: '. $cachebool) ? $class.',,<a href="' : 'なし,,<a href="'; こうなっているかもしれませんね。 $buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '. ($cachebool) ? $class.',,<a href="' : 'なし,,<a href="'; こうしたらどうなりますか?

rouningyo11
質問者

お礼

それでも同じでした。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

$a=5; $a *= 2+3 ; と $a=5*2+3; が違うのは理解できますね? http://www.php.net/manual/ja/language.operators.precedence.php 優先順位をよく調べて、あなたの書いた「1行版」がどのように解釈されるかよく考えましょう

rouningyo11
質問者

お礼

なるほど、数学の四則演算のように優先順位があるんですね。

関連するQ&A