📄 language.operators.comparison.html
字号:
<tbody valign="middle" class="tbody"> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.null.html" class="type null">null</a> or <a href="language.types.string.html" class="type string">string</a></td> <td colspan="1" rowspan="1" align="left"><a href="language.types.string.html" class="type string">string</a></td> <td colspan="1" rowspan="1" align="left">Convert <b><tt>NULL</tt></b> to "", numerical or lexical comparison</td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.boolean.html" class="type bool">bool</a> or <a href="language.types.null.html" class="type null">null</a></td> <td colspan="1" rowspan="1" align="left">anything</td> <td colspan="1" rowspan="1" align="left">Convert to <a href="language.types.boolean.html" class="type bool">bool</a>, <b><tt>FALSE</tt></b> < <b><tt>TRUE</tt></b></td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.object.html" class="type object">object</a></td> <td colspan="1" rowspan="1" align="left"><a href="language.types.object.html" class="type object">object</a></td> <td colspan="1" rowspan="1" align="left">Built-in classes can define its own comparison, different classes are uncomparable, same class - compare properties the same way as arrays (PHP 4), PHP 5 has its own <a href="language.oop5.object-comparison.html" class="link">explanation</a> </td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.string.html" class="type string">string</a>, <a href="language.types.resource.html" class="type resource">resource</a> or <a href="language.pseudo-types.html#language.types.number" class="type number">number</a></td> <td colspan="1" rowspan="1" align="left"><a href="language.types.string.html" class="type string">string</a>, <a href="language.types.resource.html" class="type resource">resource</a> or <a href="language.pseudo-types.html#language.types.number" class="type number">number</a></td> <td colspan="1" rowspan="1" align="left">Translate strings and resources to numbers, usual math</td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.array.html" class="type array">array</a></td> <td colspan="1" rowspan="1" align="left"><a href="language.types.array.html" class="type array">array</a></td> <td colspan="1" rowspan="1" align="left">Array with fewer members is smaller, if key from operand 1 is not found in operand 2 then arrays are uncomparable, otherwise - compare value by value (see following example)</td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.array.html" class="type array">array</a></td> <td colspan="1" rowspan="1" align="left">anything</td> <td colspan="1" rowspan="1" align="left"><a href="language.types.array.html" class="type array">array</a> is always greater</td> </tr> <tr valign="middle"> <td colspan="1" rowspan="1" align="left"><a href="language.types.object.html" class="type object">object</a></td> <td colspan="1" rowspan="1" align="left">anything</td> <td colspan="1" rowspan="1" align="left"><a href="language.types.object.html" class="type object">object</a> is always greater</td> </tr> </tbody> </colgroup> </table> <p class="para"> <div class="example"> <p><b>Example #1 Transcription of standard array comparison</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">// Arrays are compared like this with standard comparison operators<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">standard_array_compare</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">, </span><span style="color: #0000BB">$op2</span><span style="color: #007700">)<br />{<br /> if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">) < </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br /> return -</span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 < $op2<br /> </span><span style="color: #007700">} elseif (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op1</span><span style="color: #007700">) > </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br /> return </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 > $op2<br /> </span><span style="color: #007700">}<br /> foreach (</span><span style="color: #0000BB">$op1 </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=> </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br /> if (!</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">, </span><span style="color: #0000BB">$op2</span><span style="color: #007700">)) {<br /> return </span><span style="color: #0000BB">null</span><span style="color: #007700">; </span><span style="color: #FF8000">// uncomparable<br /> </span><span style="color: #007700">} elseif (</span><span style="color: #0000BB">$val </span><span style="color: #007700">< </span><span style="color: #0000BB">$op2</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]) {<br /> return -</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /> } elseif (</span><span style="color: #0000BB">$val </span><span style="color: #007700">> </span><span style="color: #0000BB">$op2</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]) {<br /> return </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /> }<br /> }<br /> return </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #FF8000">// $op1 == $op2<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> </p> <p class="para"> See also <a href="function.strcasecmp.html" class="function">strcasecmp()</a>, <a href="function.strcmp.html" class="function">strcmp()</a>, <a href="language.operators.array.html" class="link">Array operators</a>, and the manual section on <a href="language.types.html" class="link">Types</a>. </p> <div id="language.operators.comparison.ternary" class="sect2"> <h3 class="title">Ternary Operator</h3> <p class="para"> Another conditional operator is the "?:" (or ternary) operator. <div class="example"> <p><b>Example #2 Assigning a default value</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">// Example usage for: Ternary Operator<br /></span><span style="color: #0000BB">$action </span><span style="color: #007700">= (empty(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">])) ? </span><span style="color: #DD0000">'default' </span><span style="color: #007700">: </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">// The above is identical to this if/else statement<br /></span><span style="color: #007700">if (empty(</span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">])) {<br /> </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #DD0000">'default'</span><span style="color: #007700">;<br />} else {<br /> </span><span style="color: #0000BB">$action </span><span style="color: #007700">= </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br />}<br /><br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> The expression <i>(expr1) ? (expr2) : (expr3)</i> evaluates to <span class="replaceable">expr2</span> if <span class="replaceable">expr1</span> evaluates to <b><tt>TRUE</tt></b>, and <span class="replaceable">expr3</span> if <span class="replaceable">expr1</span> evaluates to <b><tt>FALSE</tt></b>. </p> <blockquote><p><b class="note">Note</b>: <span class="simpara"> Please note that the ternary operator is a statement, and that it doesn't evaluate to a variable, but to the result of a statement. This is important to know if you want to return a variable by reference. The statement <i>return $var == 42 ? $a : $b;</i> in a return-by-reference function will therefore not work and a warning is issued in later PHP versions. </span> </p></blockquote> <blockquote><p><b class="note">Note</b>: Is is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious: <div class="example"> <p><b>Example #3 Non-obvious Ternary Behaviour</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">// on first glance, the following appears to output 'true'<br /></span><span style="color: #007700">echo (</span><span style="color: #0000BB">true</span><span style="color: #007700">?</span><span style="color: #DD0000">'true'</span><span style="color: #007700">:</span><span style="color: #0000BB">false</span><span style="color: #007700">?</span><span style="color: #DD0000">'t'</span><span style="color: #007700">:</span><span style="color: #DD0000">'f'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// however, the actual output of the above is 't'<br />// this is because ternary expressions are evaluated from left to right<br /><br />// the following is a more obvious version of the same code as above<br /></span><span style="color: #007700">echo ((</span><span style="color: #0000BB">true </span><span style="color: #007700">? </span><span style="color: #DD0000">'true' </span><span style="color: #007700">: </span><span style="color: #DD0000">'false'</span><span style="color: #007700">) ? </span><span style="color: #DD0000">'t' </span><span style="color: #007700">: </span><span style="color: #DD0000">'f'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// here, you can see that the first expression is evaluated to 'true', which<br />// in turn evaluates to (bool)true, thus returning the true branch of the<br />// second ternary expression.<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> <br /> </p></blockquote> </div> </div><hr /><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.operators.bitwise.html">Bitwise Operators</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.operators.errorcontrol.html">Error Control Operators</a></div> <div class="up"><a href="language.operators.html">Operators</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -