目录
- 1 运算符概述
- 2 常见的运算符类型
- 2.1 算术运算符
- 2.2 赋值运算符
- 2.3 比较运算符
- 2.4 递增/递减运算符
- 2.5 逻辑运算符
- 2.6 字符串运算符
- 2.7 数组运算符
- 2.8 其他运算符
- 3 运算符的优先级
- 4 归纳
- 参考文章
1 运算符概述
(1)作用:运算符是可以通过给出的一或多个值来产生另一个值的东西。
(2)运算符可按照其能接受几个值来分组:
- 一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。
- 二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。
- 唯一的三元运算符 ? :,可接受三个值;通常就简单称之为“三元运算符”(尽管称之为条件运算符可能更合适)。
(3)运算符按功能分类:
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增/递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
2 常见的运算符类型
2.1 算术运算符
例子 | 名称 | 结果 |
---|---|---|
+$a | 标识 | 根据情况将 $a 转化为 int 或 float。 |
-$a | 取反 | $a 的负值 |
$a + $b | 加法 | $a 和 $b 的和 |
$a - $b | 减法 | $a 和 $b 的差 |
$a * $b | 乘法 | $a 和 $b 的积 |
$a / $b | 除法 | $a 除以 $b 的商 |
$a % $b | 取模 | $a 除以 $b 的余数 |
$a ** $b | 求幂 | $a 的 $b次方的值 |
特殊说明:
- 除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。整数除法可参考 intdiv()。
- 取模运算符的操作数在运算之前都会转换成 int 。 浮点数取模可参考 fmod()。
- 取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
实例:
<?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;
?>
2.2 赋值运算符
(1)最基础的赋值运算符是 “=”,另外还有引用赋值的用法,关于变量的直接赋值和引用赋值参考《【PHP基础-2】PHP变量与常量》。
(2)算术赋值运算符较为常用,说明如下表。位赋值运算符及其他赋值运算符用法参考《赋值运算符》
例子 | 等同于 | 操作 |
---|---|---|
$a += $b | $a = $a + $b | 加法 |
$a -= $b | $a = $a - $b | 减法 |
$a *= $b | $a = $a * $b | 乘法 |
$a /= $b | $a = $a / $b | 除法 |
$a %= $b | $a = $a % $b | 取模 |
$a **= $b | $a = $a ** $b | 指数 |
例子:
<?php
header("content-type:text/html;charset=utf-8");
$a=10;
$b=20;
echo $a;
echo "<br>";
echo $a+=$b;
$c=10;
echo "<br>";
echo $c-=$b;
$d=10;
echo "<br>";
echo $d*=$b;
$e=10;
echo "<br>";
echo $e/=$b;
echo "<br>";
?>
运算结果如下:
2.3 比较运算符
常见的比较运算符如下:
例子 | 名称 | 结果 |
---|---|---|
$a == $b | 等于 | true,如果类型转换后 $a 等于 $b |
$a === $b | 全等 | true,如果 $a 等于 $b,并且它们的类型也相同 |
$a != $b | 不等 | true,如果类型转换后 $a 不等于 $b |
$a <> $b | 不等 | true,如果类型转换后 $a 不等于 $b |
$a !== $b | 不全等 | true,如果 $a 不等于 $b,或者它们的类型不同 |
$a < $b | 小于 | true,如果 $a 严格小于 $b |
$a > $b | 大于 | true,如果 $a 严格大于 $b |
$a <= $b | 小于等于 | true,如果 $a 小于或者等于 $b |
$a >= $b | 大于等于 | true,如果 $a 大于或者等于 $b |
$a <=> $b | 太空船运算符(组合比较符) | 当$a小于、等于、大于 $b时,分别返回一个小于、等于、大于0的 int 值 |
不同类型进行比较时,会按下表进行类型转换,建议自己手动强制转换保证结果可控。
运算数 1 类型 | 运算数 2 类型 | 结果 |
---|---|---|
null 或 string | string | 将 null 转换为 “”,进行数字或词汇比较 |
bool 或 null | 任何其它类型 | 转换为 bool,false < true |
object | object | 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明 |
string、resource、int、float | string、resource、int、float | 将字符串和资源转换成数字,按普通数学比较 |
array | array | 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较 |
object | 任何其它类型 | object 总是更大 |
array | 任何其它类型 | array 总是更大 |
比较运算符实例请参考文章《比较运算符》。
例子:
<!--比较运算符-->
<?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);
?>
运算结果如下:
2.4 递增/递减运算符
例子 | 名称 | 效果 |
---|---|---|
++$a | 前加 | $a 的值加一,然后返回 $a |
$a++ | 后加 | 返回 $a,然后将 $a 的值加一 |
- -$a | 前减 | $a 的值减一, 然后返回 $a |
$a - - | 后减 | 返回 $a,然后将 $a 的值减一 |
特别注意的是:
- 递增/递减运算符不影响布尔值。
- 递减 null 值也没有效果,但是递增 null 的结果是 1。
更多实例请参考官方文章《递增/递减运算符》
2.5 逻辑运算符
例子 | 名称 | 结果 |
---|---|---|
$a and $b | And(逻辑与) | true,如果 $a 和 $b 都为 true |
$a or $b | Or(逻辑或) | true,如果 $a 或 $b 任一为 true |
$a xor $b | Xor(逻辑异或) | true,如果 $a 或 $b 任一为 true,但不同时是 |
! $a | Not(逻辑非) | true,如果 $a 不为 true |
$a && $b | And(逻辑与) | true,如果 $a 和 $b 都为 true |
$a || $b | Or(逻辑或) | true,如果 $a 或 $b 任一为 true |
特别注意的是:“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同(见下文运算符优先级)。
例子:
<!--逻辑运算符-->
<?php
$a=true;
$b=false;
$c=$a and $b;
$d=$a && $b;
$e=($a and $b);
echo '$c=$a and $b:';
var_dump($c);
echo "<br/>";
echo '$d=$a && $b:';
var_dump($d);
echo "<br/>";
echo '$e=($a and $b):';
var_dump($e);
echo "<br/>";
?>
运行结果如下:
2.6 字符串运算符
有两个字符串(string)运算符:
- 第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。
- 第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。
例子
<?php
$a = "Hello ";
$b = $a . "World!"; // 现在 $b 包含 "Hello World!"
$a = "Hello ";
$a .= "World!"; // 现在 $a 包含 "Hello World!"
?>
2.7 数组运算符
例子 | 名称 | 结果 |
---|---|---|
$a + $b | 联合 | $a 和 $b 的联合 |
$a == $b | 相等 | 如果 $a 和 $b 具有相同的键/值对则为 true |
$a === $b | 全等 | 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 true |
$a != $b | 不等 | 如果 $a 不等于 $b 则为 true |
$a <> $b | 不等 | 如果 $a 不等于 $b 则为 true |
$a !== $b | 不全等 | 如果 $a 不全等于 $b 则为 true |
更多实例请参考文章《数组运算符》
2.8 其他运算符
(1)?:
为三元运算符,语法如下:
(expr1) ? (expr2) : (expr3)
#对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3
在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
实例
#以下实例中通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody:
<?php
$test = '菜鸟教程';
// 普通写法
$username = isset($test) ? $test : 'nobody';
echo $username, PHP_EOL;
// PHP 5.3+ 版本写法
$username = $test ?: 'nobody';
echo $username, PHP_EOL;
?>
运行结果如下:
(2)`` 将 两短反斜杠中的内容当作命令执行。
(3)@屏蔽警告
3 运算符的优先级
(1)运算符的执行顺序按优先级和关联性来控制:
- 运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1+5 * 3的结果是16而不是18,是因为乘号(“*”)的优先级比加号(“+”)高。
- 如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-“是左联的,那么1-2-3就等同于(1-2)-3并且结果是-4.另外一方面,”="是右联的,所以 a = a= a=b= c 等 同 于 c等同于 c等同于a=( b = b= b=c)。
(2)没有结合的相同优先级的运算符不能连在一起使用,例如1<2>1在PHP是不合法的。但另外一方面表达式1<=1 == 1是合法的,因为 == 的优先级低于<=。
(3)关联性仅对二(三)元操作符有意义。一元操作符是前缀或者后缀,所以不适用该概念。例如!!
a
仅
可
分
为
!
(
!
a仅可分为!(!
a仅可分为!(!a)。
(4)括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。
(5)下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
4 归纳
(1)掌握各运算符的使用方法;
(2)掌握查询运算符使用说明的方法。《PHP官方帮助手册》
(3)理解各运算符的优先级;
参考文章
[1]《PHP官方帮助手册》一个较好的资源,方便工作时查询。
[2]《运算符优先级》
[3] 《【PHP基础】运算符》
更多推荐
【PHP基础-3】PHP常用运算符
发布评论