2016-11-05 4 views
0
<?php 

$sample = (False or 436); 
echo $sample; 
?> 

私はこのコードを使って、演算子の優先順位がコードにどのように影響するかを特定し、考えています。しかし私は私が得た答えを完全に混乱させています。php論理演算子 'または'異なるデータ型の間

<?php 

$sample = (False or 436); 
echo $sample; 
?> 

1

<?php 

$sample = (True or 436); 
echo $sample; 
?> 

ような答えを与えすぎ1を与える

<?php 

$sample = False or 436; 
echo $sample; 
?> 

は何も与えません。私はor答えた1

P.S.の隣に置くものは何でも見ることができたとして

私はこのオンラインエディタhttp://sandbox.onlinephpfunctions.com/で試してみました。

私はその背後にある実際のコンセプトを知る必要があります。

+1

[this post:](http://stackoverflow.com/questions/2803321/and-vs-as-operator#2803576)を参照してください。要するに、=は、とより高い優先順位を持つ。暗黙の順序を示す括弧を追加すると、これがより明確になります。 – mseifert

+0

@ mseifertなぜ「1」になったのですか?それは何かを参照していますか? – Hash

+0

Fine。私は答えを得た。 – Hash

答えて

0

私が得たすべての答えとして、私が投稿したもののためのすべての答えを見つけることができました。これは参考になると思います。

<?php 
    $var1 = TRUE; 
    $var2 = FALSE; 
    $var3 = 123; 


    $x = (int)$var2 or $var3; 
    echo $x;// $x assigned to $var2 and type cast into int-display 0 

    $y = ($var2 or $var3); 
    echo $y;//operation inside the() returns true. so it prints 1 

    $n = ($var2 or $var2); 
    echo $n;//operation inside the() returns false.It concider as NULL. display nothing 
    echo (int)$n;//print numerical value for false-0 

    $z = $var2; 
    echo $z;//returns 0. It is considered as NULL. so display nothing 

?> 

これは私が本当に期待している正確な回答です。ありがとう。

1

これの背後にある理由は、演算子優先順位と呼ばれるものです。角括弧を削除すると、or 436関数よりも先に割り当て$sample = falseが優先されます。結果はecho falseで、何も出力しません。そのため、ほとんどの場合、代わりに||演算子を使用する必要があります。

詳細情報:http://php.net/manual/en/language.operators.precedence.php

1

あなたはPHP Type Comparison TablesなどBooleans documentationで読み取りを持っている場合があります。上位のコメントのFred Koscharaのメモに特に注意してください。これは、OR演算子が代入演算子よりも優先順位が低いことを示しています。あなたは、代わりに|| ORの代わりに、||演算子は同じことをしますが、優先順位は高くなります。

+0

参考になりました。それは私に知られていた、または最も低い優先順位を持っています。しかし、なぜ私は結果として「1」を得たのか分からなかった。私 – Hash