2012-03-14 11 views
3

私は単項演算を使用してPHPでFizzbuzzを実行したかったのですが、出力が期待どおりではなく、なぜ私は理解できませんでしたので、 javascriptを使用すると、結果は期待通りです。どうして? JavaScriptで(あなたは "もし単項" と呼ばれる)javascriptとPHPの異なる出力での3進演算子

<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> 
<script> 
$(function(){ 
papa ='Javascript Output: '; 
for($i=1;$i <= 10; $i++){ 
papa += ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i; 
$('#result').text(papa); 
} 
}) 
</script> 
<?php 
echo 'PHP Output: '; 
for($i=1;$i <= 10; $i++){ 
$papa ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i; 
echo $papa; 
} 
?> 
<div id='result'></div> 

出力

PHP Output: 12Buzz4BuzzBuzz78BuzzBuzz 
Javascript Output: 12Fizz4BuzzFizz78FizzBuzz 

答えて

5

三項演算子は右結合性を使用し、PHPで同じ演算子は左結合性を使用しています。

  • php operator precedence
  • はいjavascript operator precedence

    • 、これは、より括弧(ならびに任意の問題に関するオペレータの優先順位)で固定することができます。

    +0

    また、論理 "and"と "or"のスーパークール2バージョンとそれらの優先順位の違いに注意してください! (PHPで) – mpen

    2
    in PHP, change 
        ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : ($i % 5 === 0) ? 'Buzz' : $i; 
        to: 
        ($i %5 === 0 && $i %3 === 0) ? 'FizzBuzz' : ($i % 3 === 0) ? 'Fizz' : (($i % 5 === 0) ? 'Buzz' : $i); 
    
    関連する問題