PHP 运算符
<div id="article_content" class="article_content clearfix"><link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css">
<div id="content_views" class="htmledit_views">
<p>本章节我们将讨论 PHP 中不同运算符的应用。</p>
<p>在 PHP 中,赋值运算符 = 用于给变量赋值。</p>
<p>在 PHP 中,算术运算符 + 用于把值加在一起。</p>
<hr>
<h2>PHP 算术运算符</h2>
<table><tbody><tr><th>运算符</th><th>名称</th><th>描述</th><th>实例</th><th>结果</th></tr><tr><td>x + y</td><td>加</td><td>x 和 y 的和</td><td>2 + 2</td><td>4</td></tr><tr><td>x - y</td><td>减</td><td>x 和 y 的差</td><td>5 - 2</td><td>3</td></tr><tr><td>x * y</td><td>乘</td><td>x 和 y 的积</td><td>5 * 2</td><td>10</td></tr><tr><td>x / y</td><td>除</td><td>x 和 y 的商</td><td>15 / 5</td><td>3</td></tr><tr><td>x % y</td><td>模(除法的余数)</td><td>x 除以 y 的余数</td><td>5 % 2<br> 10 % 8<br> 10 % 2</td><td>1<br> 2<br> 0</td></tr><tr><td>- x</td><td>取反</td><td>x 取反</td><td> <pre><?php
$x =2;
echo -$x;
?></pre> </td><td>-2</td></tr><tr><td>a . b</td><td>并置</td><td>连接两个字符串</td><td>"Hi" . "Ha"</td><td>HiHa</td></tr></tbody></table>
<p>以下实例演示了使用不同算术运算符得到的不同结果:</p>
<h2>实例</h2>
<p><?php $x=10; $y=6; echo ($x + $y); // 输出16 echo '<br>'; // 换行 echo ($x - $y); // 输出4 echo '<br>'; // 换行 echo ($x * $y); // 输出60 echo '<br>'; // 换行 echo ($x / $y); // 输出1.6666666666667 echo '<br>'; // 换行 echo ($x % $y); // 输出4 echo '<br>'; // 换行 echo -$x; ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_arithmetic">尝试一下 »</a></p>
<p>PHP7+ 版本新增整除运算符 <strong>intdiv()</strong>,该函数返回值为第一个参数除于第二个参数的值并取整(向下取整),使用实例:</p>
<h2>实例</h2>
<p><?php var_dump(intdiv(10, 3)); ?></p>
<p>以上实例会输出:</p>
<pre>int(3)</pre>
<hr>
<h2>PHP 赋值运算符</h2>
<p>在 PHP 中,基本的赋值运算符是 "="。它意味着左操作数被设置为右侧表达式的值。也就是说,"$x = 5" 的值是 5。</p>
<table><tbody><tr><th>运算符</th><th>等同于</th><th>描述</th></tr><tr><td>x = y</td><td>x = y</td><td>左操作数被设置为右侧表达式的值</td></tr><tr><td>x += y</td><td>x = x + y</td><td>加</td></tr><tr><td>x -= y</td><td>x = x - y</td><td>减</td></tr><tr><td>x *= y</td><td>x = x * y</td><td>乘</td></tr><tr><td>x /= y</td><td>x = x / y</td><td>除</td></tr><tr><td>x %= y</td><td>x = x % y</td><td>模(除法的余数)</td></tr><tr><td>a .= b</td><td>a = a . b</td><td>连接两个字符串</td></tr></tbody></table>
<p>以下实例演示了使用不同赋值运算符得到的不同结果:</p>
<h2>实例</h2>
<p><?php $x=10; echo $x; // 输出10 $y=20; $y += 100; echo $y; // 输出120 $z=50; $z -= 25; echo $z; // 输出25 $i=5; $i *= 6; echo $i; // 输出30 $j=10; $j /= 5; echo $j; // 输出2 $k=15; $k %= 4; echo $k; // 输出3 ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_assignment">尝试一下 »</a></p>
<p>以下实例演示了使用不同字符串运算符得到的相同结果:</p>
<h2>实例</h2>
<p><?php $a = "Hello"; $b = $a . " world!"; echo $b; // 输出Hello world! $x="Hello"; $x .= " world!"; echo $x; // 输出Hello world! ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_string">尝试一下 »</a></p>
<hr>
<h2>PHP 递增/递减运算符</h2>
<table id="table1"><tbody><tr><th>运算符</th><th>名称</th><th>描述</th></tr><tr><td>++ x</td><td>预递增</td><td>x 加 1,然后返回 x</td></tr><tr><td>x ++</td><td>后递增</td><td>返回 x,然后 x 加 1</td></tr><tr><td>-- x</td><td>预递减</td><td>x 减 1,然后返回 x</td></tr><tr><td>x --</td><td>后递减</td><td>返回 x,然后 x 减 1</td></tr></tbody></table>
<p>以下实例演示了使用递增/递减运算符得到的结果:</p>
<h2>实例</h2>
<p><?php $x=10; echo ++$x; // 输出11 $y=10; echo $y++; // 输出10 $z=5; echo --$z; // 输出4 $i=5; echo $i--; // 输出5 ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_increment">尝试一下 »</a></p>
<hr>
<h2>PHP 比较运算符</h2>
<p>比较操作符可以让您比较两个值:</p>
<table><tbody><tr><th>运算符</th><th>名称</th><th>描述</th><th>实例</th></tr><tr><td>x == y</td><td>等于</td><td>如果 x 等于 y,则返回 true</td><td>5==8 返回 false</td></tr><tr><td>x === y</td><td>绝对等于</td><td>如果 x 等于 y,且它们类型相同,则返回 true</td><td>5==="5" 返回 false</td></tr><tr><td>x != y</td><td>不等于</td><td>如果 x 不等于 y,则返回 true</td><td>5!=8 返回 true</td></tr><tr><td>x <> y</td><td>不等于</td><td>如果 x 不等于 y,则返回 true</td><td>5<>8 返回 true</td></tr><tr><td>x !== y</td><td>绝对不等于</td><td>如果 x 不等于 y,或它们类型不相同,则返回 true</td><td>5!=="5" 返回 true</td></tr><tr><td>x > y</td><td>大于</td><td>如果 x 大于 y,则返回 true</td><td>5>8 返回 false</td></tr><tr><td>x < y</td><td>小于</td><td>如果 x 小于 y,则返回 true</td><td>5<8 返回 true</td></tr><tr><td>x >= y</td><td>大于等于</td><td>如果 x 大于或者等于 y,则返回 true</td><td>5>=8 返回 false</td></tr><tr><td>x <= y</td><td>小于等于</td><td>如果 x 小于或者等于 y,则返回 true</td><td>5<=8 返回 true</td></tr></tbody></table>
<p>以下实例演示了使用一些比较运算符得到的不同结果:</p>
<h2>实例</h2>
<p><?php $x=100; $y="100"; var_dump($x == $y); echo "<br>"; var_dump($x === $y); echo "<br>"; var_dump($x != $y); echo "<br>"; var_dump($x !== $y); echo "<br>"; $a=50; $b=90; var_dump($a > $b); echo "<br>"; var_dump($a < $b); ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_comparison">尝试一下 »</a></p>
<hr>
<h2>PHP 逻辑运算符</h2>
<table><tbody><tr><th>运算符</th><th>名称</th><th>描述</th><th>实例</th></tr><tr><td>x and y</td><td>与</td><td>如果 x 和 y 都为 true,则返回 true</td><td>x=6<br> y=3<br> (x < 10 and y > 1) 返回 true</td></tr><tr><td>x or y</td><td>或</td><td>如果 x 和 y 至少有一个为 true,则返回 true</td><td>x=6<br> y=3<br> (x==6 or y==5) 返回 true</td></tr><tr><td>x xor y</td><td>异或</td><td>如果 x 和 y 有且仅有一个为 true,则返回 true</td><td>x=6<br> y=3<br> (x==6 xor y==3) 返回 false</td></tr><tr><td>x && y</td><td>与</td><td>如果 x 和 y 都为 true,则返回 true</td><td>x=6<br> y=3<br> (x < 10 && y > 1) 返回 true</td></tr><tr><td>x || y</td><td>或</td><td>如果 x 和 y 至少有一个为 true,则返回 true</td><td>x=6<br> y=3<br> (x==5 || y==5) 返回 false</td></tr><tr><td>! x</td><td>非</td><td>如果 x 不为 true,则返回 true</td><td>x=6<br> y=3<br> !(x==y) 返回 true</td></tr></tbody></table>
<hr>
<h2>PHP 数组运算符</h2>
<table id="table2"><tbody><tr><th>运算符</th><th>名称</th><th>描述</th></tr><tr><td>x + y</td><td>集合</td><td>x 和 y 的集合</td></tr><tr><td>x == y</td><td>相等</td><td>如果 x 和 y 具有相同的键/值对,则返回 true</td></tr><tr><td>x === y</td><td>恒等</td><td>如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true</td></tr><tr><td>x != y</td><td>不相等</td><td>如果 x 不等于 y,则返回 true</td></tr><tr><td>x <> y</td><td>不相等</td><td>如果 x 不等于 y,则返回 true</td></tr><tr><td>x !== y</td><td>不恒等</td><td>如果 x 不等于 y,则返回 true</td></tr></tbody></table>
<p>以下实例演示了使用一些数组运算符得到的不同结果:</p>
<h2>实例</h2>
<p><?php $x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; // $x 和 $y 数组合并 var_dump($z); var_dump($x == $y); var_dump($x === $y); var_dump($x != $y); var_dump($x <> $y); var_dump($x !== $y); ?></p>
<p><br><ahref="https://www.runoob.com/try/showphp.php?filename=demo_operator_array">尝试一下 »</a></p>
<hr>
<h2>三元运算符</h2>
<p>另一个条件运算符是"?:"(或三元)运算符 。</p>
<h3>语法格式</h3>
<pre>(expr1) ? (expr2) : (expr3) </pre>
<p>对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。</p>
<p>自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。</p>
<h3>实例</h3>
<p>以下实例中通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody:</p>
<h2>实例</h2>
<p><?php $test = '菜鸟教程'; // 普通写法 $username = isset($test) ? $test : 'nobody'; echo $username, PHP_EOL; // PHP 5.3+ 版本写法 $username = $test ?: 'nobody'; echo $username, PHP_EOL; ?></p>
<pre>菜鸟教程
菜鸟教程</pre>
<p><strong>注意:</strong>PHP_EOL 是一个换行符,兼容更大平台。</p>
<p>在 PHP7+ 版本多了一个 NULL 合并运算符 ??,实例如下:</p>
<h2>实例</h2>
<p><?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 类似的三元运算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?></p>
<hr>
<h2>组合比较符(PHP7+)</h2>
<p>PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。</p>
<p>语法格式如下:</p>
<pre>$c = $a <=> $b;</pre>
<p>解析如下:</p>
<ul><li>如果<strong> $a > $b</strong>, 则 <strong>$c</strong> 的值为 <strong>1</strong>。</li><li>如果 <strong>$a == $b</strong>, 则 <strong>$c</strong> 的值为 <strong>0</strong>。</li><li>如果 <strong>$a < $b</strong>, 则 <strong>$c</strong> 的值为 <strong>-1</strong>。</li></ul>
<p>实例如下:</p>
<h2>实例</h2>
<p><?php // 整型 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点型 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?></p>
<hr>
<h2>运算符优先级</h2>
<p>下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。</p>
<p><strong>说明</strong>:左 = 从左到右,右 = 从右到左。</p>
<table><thead><tr><th>结合方向</th><th>运算符</th><th>附加信息</th></tr></thead><tbody><tr><td>无</td><td>clone new</td><td>clone 和 new</td></tr><tr><td>左</td><td>[</td><td>array()</td></tr><tr><td>右</td><td>++ -- ~ (int) (float) (string) (array) (object) (bool) @</td><td>类型和递增/递减</td></tr><tr><td>无</td><td>instanceof</td><td>类型</td></tr><tr><td>右</td><td>!</td><td>逻辑运算符</td></tr><tr><td>左</td><td>* / %</td><td>算术运算符</td></tr><tr><td>左</td><td>+ – .</td><td>算术运算符和字符串运算符</td></tr><tr><td>左</td><td><< >></td><td>位运算符</td></tr><tr><td>无</td><td>== != === !== <></td><td>比较运算符</td></tr><tr><td>左</td><td>&</td><td>位运算符和引用</td></tr><tr><td>左</td><td>^</td><td>位运算符</td></tr><tr><td>左</td><td>|</td><td>位运算符</td></tr><tr><td>左</td><td>&&</td><td>逻辑运算符</td></tr><tr><td>左</td><td>||</td><td>逻辑运算符</td></tr><tr><td>左</td><td>? :</td><td>三元运算符</td></tr><tr><td>右</td><td>= += -= *= /= .= %= &= |= ^= <<= >>= =></td><td>赋值运算符</td></tr><tr><td>左</td><td>and</td><td>逻辑运算符</td></tr><tr><td>左</td><td>xor</td><td>逻辑运算符</td></tr><tr><td>左</td><td>or</td><td>逻辑运算符</td></tr><tr><td>左</td><td>,</td><td>多处用到</td></tr></tbody></table>
<p>运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。</p>
<h2>实例</h2>
<p><?php // 优先级: && > = > and // 优先级: || > = > or $a = 3; $b = false; $c = $a or $b; var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true $d = $a || $b; var_dump($d); //这里的 $d 就是 boolean 值 true ?></p>
<p>以上实例输出结果为:</p>
<pre>int(3)
bool(true)</pre>
<h3>括号的使用</h3>
<p>我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。</p>
<h2>实例</h2>
<p><?php // 括号优先运算 $a = 1; $b = 2; $c = 3; $d = $a + $b * $c; echo $d; echo "\n"; $e = ($a + $b) * $c; // 使用括号 echo $e; echo "\n"; ?></p>
<p>以上实例输出结果为:</p>
<pre>7
9</pre>
</div>
</div>
<div id="treeSkill"></div>
页:
[1]