Source of: /manual/en/language.operators.precedence.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'language.operators.precedence.php',
1 => 'Operator Precedence',
),
'up' =>
array (
0 => 'language.operators.php',
1 => 'Operators',
),
'prev' =>
array (
0 => 'language.operators.php',
1 => 'Operators',
),
'next' =>
array (
0 => 'language.operators.arithmetic.php',
1 => 'Arithmetic Operators',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="language.operators.precedence" class="sect1">
<h2 class="title">Operator Precedence</h2>
<p class="para">
The precedence of an operator specifies how "tightly" it binds two
expressions together. For example, in the expression <i>1 +
5 * 3</i>, the answer is <i>16</i> and not
<i>18</i> because the multiplication ("*") operator
has a higher precedence than the addition ("+") operator.
Parentheses may be used to force precedence, if necessary. For
instance: <i>(1 + 5) * 3</i> evaluates to
<i>18</i>. If operator precedence is equal, left to right
associativity is used.
</p>
<p class="para">
The following table lists the precedence of operators with the
highest-precedence operators listed at the top of the table. Operators
on the same line have equal precedence, in which case their
associativity decides which order to evaluate them in.
</p><table class="doctable table">
<caption><b>Operator Precedence</b></caption>
<thead valign="middle">
<tr valign="middle">
<th>Associativity</th>
<th>Operators</th>
<th>Additional Information</th>
</tr>
</thead>
<tbody valign="middle" class="tbody">
<tr valign="middle">
<td align="left">non-associative</td>
<td align="left">clone new</td>
<td align="left"><a href="language.oop5.cloning.php" class="link">clone</a> and <a href="language.oop5.basic.php#language.oop5.basic.new" class="link">new</a></td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">[</td>
<td align="left"><a href="function.array.php" class="function">array()</a></td>
</tr>
<tr valign="middle">
<td align="left">non-associative</td>
<td align="left">++ --</td>
<td align="left">
<a href="language.operators.increment.php" class="link">increment/decrement</a>
</td>
</tr>
<tr valign="middle">
<td align="left">right</td>
<td align="left">~ - (int) (float) (string) (array) (object) (bool) @</td>
<td align="left">
<a href="language.types.php" class="link">types</a>
</td>
</tr>
<tr valign="middle">
<td align="left">non-associative</td>
<td align="left">instanceof</td>
<td align="left">
<a href="language.types.php" class="link">types</a>
</td>
</tr>
<tr valign="middle">
<td align="left">right</td>
<td align="left">!</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">* / %</td>
<td align="left">
<a href="language.operators.arithmetic.php" class="link">arithmetic</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">+ - .</td>
<td align="left">
<a href="language.operators.arithmetic.php" class="link">arithmetic</a> and
<a href="language.operators.string.php" class="link">string</a></td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left"><< >></td>
<td align="left">
<a href="language.operators.bitwise.php" class="link">bitwise</a>
</td>
</tr>
<tr valign="middle">
<td align="left">non-associative</td>
<td align="left">< <= > >= <></td>
<td align="left">
<a href="language.operators.comparison.php" class="link">comparison</a>
</td>
</tr>
<tr valign="middle">
<td align="left">non-associative</td>
<td align="left">== != === !==</td>
<td align="left">
<a href="language.operators.comparison.php" class="link">comparison</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">&</td>
<td align="left">
<a href="language.operators.bitwise.php" class="link">bitwise</a> and
<a href="language.references.php" class="link">references</a></td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">^</td>
<td align="left">
<a href="language.operators.bitwise.php" class="link">bitwise</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">|</td>
<td align="left">
<a href="language.operators.bitwise.php" class="link">bitwise</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">&&</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">||</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">? :</td>
<td align="left">
<a href="language.operators.comparison.php#language.operators.comparison.ternary" class="link">ternary</a>
</td>
</tr>
<tr valign="middle">
<td align="left">right</td>
<td align="left">
= += -= *= /= .= %= &= |= ^= <<= >>=
</td>
<td align="left">
<a href="language.operators.assignment.php" class="link">assignment</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">and</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">xor</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">or</td>
<td align="left">
<a href="language.operators.logical.php" class="link">logical</a>
</td>
</tr>
<tr valign="middle">
<td align="left">left</td>
<td align="left">,</td>
<td align="left">many uses</td>
</tr>
</tbody>
</table>
<p>
</p>
<p class="para">
Left associativity means that the expression is evaluated from left to right,
right associativity means the opposite.
</p><div class="example">
<p><b>Example #1 Associativity</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">3 </span><span style="color: #007700">* </span><span style="color: #0000BB">3 </span><span style="color: #007700">% </span><span style="color: #0000BB">5</span><span style="color: #007700">; </span><span style="color: #FF8000">// (3 * 3) % 5 = 4<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">true </span><span style="color: #007700">? </span><span style="color: #0000BB">0 </span><span style="color: #007700">: </span><span style="color: #0000BB">true </span><span style="color: #007700">? </span><span style="color: #0000BB">1 </span><span style="color: #007700">: </span><span style="color: #0000BB">2</span><span style="color: #007700">; </span><span style="color: #FF8000">// (true ? 0 : true) ? 1 : 2 = 2<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">$b </span><span style="color: #007700">+= </span><span style="color: #0000BB">3</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a = ($b += 3) -> $a = 5, $b = 5<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
Use parentheses to increase readability of the code.
</p>
<blockquote><p><b class="note">Note</b>:
Although <i>=</i> has a lower precedence than
most other operators, PHP will still allow expressions
similar to the following: <i>if (!$a = foo())</i>,
in which case the return value of <i>foo()</i> is
put into <var class="varname">$a</var>.
<br />
</p></blockquote>
</div><?php manual_footer(); ?>