downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

代数演算子> <演算子
Last updated: Fri, 13 Nov 2009

view this page in

演算子の優先順位

演算子の優先順位は、二つの式が"緊密に"結合している度合いを指定します。 例えば、式 1 + 5 * 3 の答えは 16 になり、18 とはなりません。 これは乗算演算子("*")は、加算演算子("+")より高い優先順位を有するか らです。必要に応じて強制的に優先順位を設定するために括弧を使用する ことが可能です。例えば、18と評価するためには、 (1 + 5) * 3 とします。 演算子の優先順位が等しい場合は、左から右へ順に評価されます。

以下の表では、優先順位が高い順に演算子を挙げています。 同じ行にある演算子は優先順位が等しくなります。そのような場合は、 結合時の評価にしたがって評価順が決まります。

演算子の優先順位
結合時の評価 演算子 追加情報
結合しない clone new clone および new
left [ array()
結合しない ++ -- 加算子/減算子
結合しない ~ - (int) (float) (string) (array) (object) (bool) @
結合しない instanceof
right ! 論理演算子
left * / % 代数演算子
left + - . 代数演算子 そして 文字列演算子
left << >> ビット演算子
結合しない < <= > >= <> 比較演算子
結合しない == != === !== 比較演算子
left & ビット演算子 そして リファレンス
left ^ ビット演算子
left | ビット演算子
left && 論理演算子
left || 論理演算子
left ? : 三項演算子
right = += -= *= /= .= %= &= |= ^= <<= >>= 代入演算子
left and 論理演算子
left xor 論理演算子
left or 論理演算子
left , さまざまな利用法

結合時の評価が left の場合は式が左から右に評価され、一方 right の場合は その逆となります。

例1 結合時の評価

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5
?>

コードの可読性を高めるためには括弧を使用します。

注意: = は他のほとんどの演算子よりも優先順位が低いはずなのにもかかわらず、 PHP は依然として if (!$a = foo()) のような式も許します。この場合は foo() の返り値が $a に代入されます。



代数演算子> <演算子
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
演算子の優先順位
Patryk Bratkowski
07-Oct-2009 02:18
Please note that certain operators change the variable type in ways you may not expect.

If you want to append the result of an arithmetic operation to a string you have to do it in two steps:

<?php
    $ord
= $i + 1;
   
$field = "cellID" . $ord; // returns a string
   
$field = "cellID" . $i + 1; // because of the addition it returns an int
?>
headden at karelia dot ru
09-Jun-2009 11:02
Although example above already shows it, I'd like to explicitly state that ?: associativity DIFFERS from that of C++. I.e. convenient switch/case-like expressions of the form

$i==1 ? "one" :
$i==2 ? "two" :
$i==3 ? "three" :
"error";

will not work in PHP as expected
Pies
08-Feb-2009 07:22
You can use the "or" and "and" keywords' lower precedence for a bit of syntax candy:

<?php

$page
= (int) @$_GET['page'] or $page = 1;

?>

代数演算子> <演算子
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites