运算符是用来对变量、常量和数据进行计算的符号,它可以通过一个或多个值(即表达式)产生另一个值。因此,任何能够返回一个值的结构都是运算符,而那些没有返回值的就不是运算符,如函数可以视为一个运算符,而echo命令就不是一个运算符。
PHP提供了以下三种类型的运算符。
- 一元运算符,只运算一个值,如!(反运算符)或++(递加运算符)。
- 二元运算符,PHP支持的大多运算符都是这种。
- 三元运算符:?:。根据一个表达式在另两个表达式中进行选择计算,是条件语句的简化应用。注意,为了避免误用,建议把整个三元表达式放在括号里。
算术运算符
算术运算符是用来处理四则运算的符号,在数学计算中应用比较多。常用算术运算符如下表所示。
算术运算符 | 说明 |
---|---|
- | 取反。如-$a,表示变量$a的负值 |
+ | 加法。如$a+$b |
- | 减法。如$a-$b |
* | 乘法。如a*b |
/ | 除法。如$a/$b |
% | 取模。如$a%$b,获得$a除以$b的余数 |
赋值运算符
基本的赋值运算符是=。它实际上就是把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。例如,“$a=3”的值时3,因此下面写法也是正确的:
<?php $a = ($b = 4) + 5; ?>
在上面的代码中,变量$a的值为9,而变量$b的值就成了4.
在基本赋值运算符之外,还有适合于所有二元算术、数组集合和字符串运算符的组合运算符,如下表所示。
组合运算符 | 说明 |
---|---|
.= | 先连接后赋值。如$a.=$b,等于$a=$a.$b |
+= | 先加后赋值。如$+=$b,等于$a=$a+$b |
-= | 先减后赋值。如$a-=$b,等于$a=$a-$b |
*= | 先乘后赋值。如$a*=$b,等于$a=$a*$b |
/= | 先除后赋值。如$a/=$b,等于$a=$a/$b |
字符串运算
字符串运算有以下两种:
- 连接运算符(.),返回其左、右两个参数连接后的字符串。
- 连接赋值运算符(.=),将右边参数附加到左边参数后。如下:
<?<?php $a = "Hello "; $b = $a . "World!"; //$b ="Hello World!" $a = "Hello "; $a .= "World!"; //$a - "Hello World!" ?>
位运算符
位运算符允许对整型数中指定的位进行求值和操作。如果左右两个参数都是字符串,则位运算符将操作字符的ASCII值。PHP中的位运算符说明如下表所示。
位运算符 | 说明 |
---|---|
& | 按位与(And)。如$a &$b,将把$a和$b 中都为1的位设为1 |
| | 按位或(Or)。如$a|$b,将把$a或者$b中为1的位设为1 |
^ | 按位异或(Xor)。如$a^$b,将把$a和$b中不同的位设为1 |
~ | 按位非(Not)。如~$a,将$a中为0的位设为1,反之亦然 |
<< | 左移。如$a<<$b,将$a中的位向左移动$b次(每一次移动都表示乘以2) |
>> | 右移。如$a>>$b,将$a中的位向右移动$b次(每一次移动都表示除以2) |
示例:在下面代码中使用位运算符对变量中的值进行位运算操作。
<?<?php echo 12 ^9; //输出为5 echo "12" ^ "9"; //输出退格字符(ascii 8) echo "hallo" ^ "hello"; //输出ASCII值#0 #4 #0 #0 #0 echo 2 ^ "3"; //输出1 echo "2" ^ 3; //输出1 ?>
比较运算符
比较运算符允许对两个值进行比较,返回结果为布尔值。如果比较结果为真,则返回值为True,否则返回值为False。PHP中的比较运算符说明如下表:
比较运算符 | 说明 |
---|---|
== | 等于。如$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的integer值。PHP7开始支持 |
?? | NULL合并操作符。如$a??$b??$c,从左往右第一个存在且不为NULL的操作数。如果都没有定义且不为NULL,则返回 NULL。PHP7开始支持 |
如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于switch语句。例如:
<?php var_dump(0 == "a"); //0 == 0 -> True var_dump("1" == "01"); //1 == 1 -> True var_dump("1" == "1e0"); //1 == 1 -> True ?>
逻辑运算符
逻辑运算符 | 说明 |
---|---|
and | 逻辑与。如果$a 与$b 都为 True,则$a and $b 返回值等于 True |
&& | 逻辑与。如果$a 与$b 都为 True,则$a && $b 返回值等于 True |
or | 逻辑或。如果$a 或$b 有一个为 True,则$a or $b 返回值等于 True |
|| | 逻辑或。如果$a 或$b 有一个为 True,则$a || $b 返回值等于 True |
xor | 逻辑异或。如果$a 或$b,有一个为 True,另一个为 False,则$a xor $b 返回值等于 True |
! | 逻辑非。如果$a 为 True,则 !$a 返回值等于 False |
示例: 下面代码中的foo()
函数不会被调用,因为它们被运算符“短路”了。
<?php $a = False && foo(); $b = True || foo(); $c = (False and foo()); $d = (True or foo()); ?>
错误控制运算符
PHP 支持控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略。如果激活track_errors
特性,表达式所产生的任何错误信息都被存放在变量php_errormsg
中。例如:
<?php $a = 1 / 0; ?>
运行上面代码,则会产生一个异常,并在浏览器中显示出来。如果要避免错误信息显示在浏览器中,则可以在表达式前面添加@运算符。例如:
<?php $a = @(1 / 0); ?>
注意: @运算符只对表达式有效。简单说,如果能从某处得到值,就能在它前面加上@ 运算符。例如,可以把它放在变量、函数和include()
调用、常量等之前。不能把它放在函数或类的定义之前,也不能用于条件结构前。
其他运算符
1. 三元运算符
三元运算符的功能与if-else
语句相同,但它在一行中书写,代码精练、执行效率高。其语法格式如下:
(expr1)?(expr2):(expr3);
如果条件表达式 expr1 的求值为真,则执行表达式 expr2,并发牛其值;否则执行表达式 expr3,并返回其值。
可以省略三元运算符中间表达式 expr2。其语法格式如下:
expr1 ?: expr3
如果条件表达式 expr1 的求值为真,则返回 expr1 的值,否则返回表达式 expr3 的值。
示例: 下面代码声明 4 个变量 a、b、c、d,然后比较相邻两个变量的值,最后输出一个字符 C。
<?php $a=1;$b=2;$c=3;$d=4; echo $a<$b?'A':$b<$c?'B':$c<$d?'C':'D'; ?>
上面代码是一个连续嵌套的条件运算。如果不细看,很容易出错,因为三元条件运算符的结合顺序是从左到右,上面表达式可以分解为如下形式:
echo $a < $b ? 'A' : $b; //第一步比较,返回结果字符'A' echo 'A' < $c ? 'B' : $c; //第二步比较,返回结果字母'B' echo 'B' < $d ? 'C' : 'D'; //第三步比较,返回结果字母'C'
字符与数字比较时,将字符转换为数字再进行大小比较,字符转换为数字为 0。
注意: 嵌套使用三元字符,可读性不是很好,建议使用 if-else
语句实现。
2. 递增和递减运算符
递增和递减运算符有以下 4 种形式,简单说明如下表所示。
运算符 | 名称 | 说明 |
---|---|---|
++$a | 前加 | $a 的值加 1,然后返回 $a |
$a++ | 后加 | 返回 $a,然后将 $a 的值加 1 |
$a | 前减 | $a 的值见 1,然后返回 $a |
$a-- | 后减 | 返回 $a,然后将 $a 的值减 1 |
示例: 下面的代码比较递增变量 $i 的不同用法,导致循环次数不同。
<?php for ($i = 0; $i++ <= 10;) { echo $i." "; } echo "<br>"; for ($i = 0; ==$i <= 10;) { echo $i." "; } ?>
第一次循环输出:1 2 3 4 5 6 7 8 9 10 11,第二次循环输出:1 2 3 4 5 6 7 8 9 10。可以看到第二次循环少了一次循环,因为变量 $i
递增后再进行比较,导致出发停止循环的条件。
运算符的优先级和结合方向
所谓运算符的优先级,是指在表达式中哪一个运算符先计算,哪一个运算符后计算。如数学四则运算中的“先乘除,后加减”,就说明乘除运算符的优先级高于加减运算符。 PHP 的运算符在运算中遵循的规则是:优先级高的操作先执行,优先级低的操作后执行,同一优先级的操作,按照从左到右的顺序执行。
注意: 小括号内的运算优先级最高。因此可以通过小括号主动改变表达式中运算符的运算优先级。
2019年12月1日 上午9:23 沙发
有一个程序大师