
2.5 PHP运算符

运算符是用来对变量、常量或数据进行计算的符号。PHP中的运算符包括算术运算符、字符串运算符、赋值运算符、位运算符、逻辑运算符、比较运算符、三元运算符、错误控制运算符等。
2.5.1 算术运算符
算术运算符是处理算术运算的符号。常用的算术运算符如表2-6所示。
表2-6 常用的算术运算符

注意:在算数运算中取余(%)时,如果被除数是负数,取得的结果也一定是负数。
提示:递增运算和递减运算,主要是针对单一的变量操作的。它们都有两种情况,一种是运算符(++或--)放在变量前,表示预递增或预递减,变量先加1或者减1,然后赋值给自身;另一种是将运算符放到变量的后面,表示后递增或后递减,变量先返回自身的值,然后再将自身的值加1或者减1。
【例2-24】(实例文件:ch02\Chap2.24.php)算术运算符的应用。

在IE浏览器中运行结果如图2-33所示。

图2-33 算术运算符的应用
2.5.2 字符串运算符
在PHP中,字符串运算符只有一个“.”,作用是把两个字符串连接在一起,组成一个新的字符串。例如下面的代码:

在页面中输出的结果为“我和你”。
2.5.3 赋值运算符
基本的赋值运算符是“=”,表示把“=”右边的值赋值给左边的变量或者常量。PHP中的赋值运算符如表2-7所示。
表2-7 赋值运算符

2.5.4 位运算符
位运算符是指对二进制位从低位到高位对齐后进行运算。PHP中的位运算符如表2-8所示。
表2-8 位运算符

【例2-25】(实例文件:ch02\Chap2.25.php)位运算符的应用。

在IE浏览器中运行结果如图2-34所示。

图2-34 位运算符的应用
提示:将变量$a和$b的值转换为二进制:5的二进制为0000 0101,7的二进制为0000 0111。
在按位与的过程中,按位比较,相同的位上都为1则为1,其他情况为0,比较结果为0000 0101,输出结果为5。
在按位或的过程中,按位比较,相同的位上有1,则为1,全为0则为0,比较的结果为0000 0111,输出的结果为7。
在按位异或的过程中,按位比较,相同的位上不相同,则为1,相同为0,比较结果为0000 0010,输出结果为2。
2.5.5 逻辑运算符
逻辑运算符用来进行逻辑运算的,是程序设计中非常重要的一组运算符。PHP中的逻辑运算符如表2-9所示。
表2-9 逻辑运算符

在逻辑运算符中,逻辑与和逻辑或这两运算符分别有两种运算符号(&&/and和||/or),但是同一个逻辑结构的两个运算符却有着不同的优先级。
【例2-26】(实例文件:ch02\Chap2.26.php)逻辑运算符的应用。

在IE浏览器中运行结果如图2-35所示。
在例2-26中,and和&&、or和||都是表示相同的逻辑结构,结果却不一样。为什么?
其实是因为and、or优先级低于&&、||和=,而&&、||优先级又高于=,所以上面实例中$b和$b1在逻辑运算时,先做赋值运算,然后再做and和or的逻辑运算,所以最后出来上面的结果。
注意:在使用and、or和xor的逻辑运算符,不要和=、&&、||一起使用,避免由于优先级的问题而发生不必要的逻辑错误。

图2-35 逻辑运算符的应用
2.5.6 比较运算符
比较运算符用于比较两个值(数字或字符串)的大小或者真假。PHP中的比较运算符如表2-10所示。
表2-10 比较运算符

注意:“==”与“===”和“!=”与“!==”的区别。$a==$b表示$a和$b转换类型后值相同,但是类型不一定相同;$a===$b表示$a和$b的值相同,类型也相同;$a!=$b表示$a和$b转换类型后值不相同,类型也不一定相同;$a!==$b表示$a和$b转换类型后值不相同,或者类型不同。
2.5.7 三元运算符
PHP中三元运算符又称为三目运算符,它可以实现简单的条件判断功能,三元运算符的功能与“if....else”流程语句一致,它在一行中书写,不仅代码精练,而且执行效率也高。语法格式如下:

其中,问号的前面是判断的条件,如果满足该条件时执行结果1,不满足时执行结果2。
例如,判断变量$a与变量$b的大小,如果$a-$b>0,执行结果1;不满足,执行结果2。

输出的结果为大于。
2.5.8 错误控制运算符
当PHP表达式产生错误时,可以通过错误控制运算符@进行控制。只需将@运算符放置在PHP表达式之前,该表达式产生的任何错误信息将不会输出到页面。但是要注意,@运算符只是对错误信息不进行输出,并没有真正解决错误。
使用错误控制运算符@不仅可以避免浏览器页面出现错误信息,影响页面美观,还能避免错误信息外露,造成系统漏洞。

运行上面的代码,输出Notice:Undefined variable:fn in…\Chap2.29.php on line 2的错误,提示使用了未定义的变量。如果不想显示这个错误,就可以在表达式前面加上@,具体代码如下:

错误信息将不会输出,但是错误依然存在。
2.5.9 运算符的优先顺序
运算符的优先顺序,是指在表达式运算时哪个运算符先执行。例如,常说的先执行乘除运算,再执行加减运算。
在PHP中,运算符应该遵循优先级高的运算先执行,优先级低的运算后执行,相同优先级的运算按照从左到右的顺序进行。另外,可以使用圆括号强制改变运算符的优先级,圆括号内的运算先执行。PHP中运算符的优先级如表2-11所示。
表2-11 运算符的优先级

可以发现,运算符是比较多的,无须刻意去记住它们,如果写的表达式很复杂,而且包含很多运算符的话,可以多使用括号设置运算的顺序,这样会减少出错的概率。