- ベストアンサー
三項演算子を使用した文字列連結のエラーについて
- 質問文章には、文字列連結の中で三項演算子を使用している部分があります。
- 質問者は、この三項演算子を1行にまとめた場合にエラーが発生し、意図した結果が出力されないことに気づきました。
- 質問者は、なぜエラーが発生するのかと、1行にした場合と2行に分けた場合の速度について知りたいと思っています。
- みんなの回答 (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スクリプトでは問題にはなりません。速度より「ソースの読みやすさ」を優先してください。
その他の回答 (2)
- maiko0318
- ベストアンサー率21% (1483/6969)
$buffer .= (',,'.$key.' 数: '.$value[0]['length'].' クラス: '. $cachebool) ? $class.',,<a href="' : 'なし,,<a href="'; こうなっているかもしれませんね。 $buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '. ($cachebool) ? $class.',,<a href="' : 'なし,,<a href="'; こうしたらどうなりますか?
お礼
それでも同じでした。
- kmee
- ベストアンサー率55% (1857/3366)
$a=5; $a *= 2+3 ; と $a=5*2+3; が違うのは理解できますね? http://www.php.net/manual/ja/language.operators.precedence.php 優先順位をよく調べて、あなたの書いた「1行版」がどのように解釈されるかよく考えましょう
お礼
なるほど、数学の四則演算のように優先順位があるんですね。
お礼
$buffer .= ',,'.$key.' 数: '.$value[0]['length'].' クラス: '. ($cachebool ? $class.',,<a href="' : 'なし,,<a href="'); これでちゃんとした結果が得られました。 速度に違いはないのですね、二行に分けた方が分かりやすそうなのでせっかくですが辞めておきます。すっきりしました、ありがとうございました。