2.5 PHP运算符
学过其他语言的读者,对于运算符应该不会陌生,运算符可以用来处理数字、字符串及其他的比较运算和逻辑运算等。在PHP中,运算符两侧的操作数会自动地进行类型转换,这在其他的编程语言中并不多见。在PHP的编程中主要有三种类型的运算符,它们分别是:
● 一元运算符,只运算一个值,例如:!(取反运算符)或++(加一运算符)。
● 二元运算符,PHP支持的大多数运算符都是这种,例如:$a+$b。
● 三元运算符,(即?:)它被用来根据一个表达式的值在另两个表达式中选择一个,而不是用来在两个语句或者程序路线中选择。
PHP中常用运算符有算术运算符、赋值运算符、比较运算符、三元运算符、错误控制运算符、逻辑运算符、字符串运算符、数组运算符等。本节将主要介绍这些常用的运算符,以及运算符的优先级。
2.5.1 算术运算符
算术运算符是用来处理四则运算的符号,是最简单、也最常用的符号,尤其是数字的处理,几乎都会使用到算术运算符号。PHP的算术运算符如表2-2所示。
表2-2 算术运算符
注意
除号(/)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
2.5.2 赋值运算符
赋值运算符(Assignment Operator)把表达式右边的值赋给左边变量或常量。基本的赋值运算符是=,它意味着把右边表达式的值赋给左边的运算数。PHP中的赋值运算符见表2-3所示。
表2-3 赋值运算符
在基本赋值运算符之外,还有适合于所有二元算术和字符串运算符的“组和运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
运行结果如图2-15所示。
图2-15 赋值运算字符串结果
2.5.3 比较运算符
比较操作符,顾名思义就是可用来比较的操作符号,根据结果来返回true或false。比较运算符,允许对两个值进行比较,PHP的比较运算符如表2-4所示。
表2-4 比较运算符
2.5.4 三元运算符
三元运算符是?:,三元运算符的功能和if...else语句很相似,语法如下:
首先对expr1求值,若结果为True,则表达式(expr1)?(expr2):(expr3)的值为expr2,否则其值为expr3。例如:
首先判断$_POST['action']变量是否为空值,若是则给$action赋值为default,否则将$_POST['action']变量的值赋值给$action。可以将上面的代码改写成以下的代码:
2.5.5 错误抑制运算符
抑制操作符可在任何表达式前使用,PHP支持一个错误抑制运算符@。当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。@运算符只对表达式有效。
那么,何时使用此运算符呢?一个简单的规则就是,如果能从某处得到值,就能在它前面加上@运算符。例如,可以把它放在变量、函数和include()调用、常量之前。不能把它放在函数或类的定义之前,也不能用于条件结构(例如if和foreach等)。
比如下面的代码:
如果mysql_connect()连接失败,将显示系统的错误提示,而后继续执行下面的程序。如果不想显示系统的错误提示,并希望失败后立即结束程序,则可以改写上面的代码如下:
在mysql_connect()函数前加上@运算符来屏蔽系统的错误提示,同时使用die()函数给出自定义的错误提示,然后立即退出程序。这种用法在大型程序中很常见。
2.5.6 逻辑运算符
PHP的逻辑运算符(Logical Operators)通常用来测试真假值,常用的逻辑运算符如表2-5所示。
表2-5 逻辑运算符
“与”和“或”有两种不同形式运算符,它们运算的优先级不同,&&比||优先级高。
2.5.7 字符串运算符
字符串运算符(String Operator)有两个字符串运算符。第一个是连接运算符(.),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(.=),它将右边参数附加到左边的参数后。
例如:
2.5.8 数组运算符
PHP的数组运算符,如表2-6所示。
表2-6 数组运算符
联合运算符(+)把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。下面通过一个实例来看一下如何用+运算符联合两个数组:
可以看到,在联合之后的数组结果如图2-16所示。
图2-16 联合数组标例
2.5.9 运算符的优先级
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1+2*3的结果为7是因为乘号(*)的优先级比加号(+)高。必要时可以用括号来强制改变优先级。例如(1+2)*3的值为9。使用括号也可以增强代码的可读性。如果运算符优先级相同,则使用从左到右的左结合顺序(左结合表示表达式从左向右求值,右结合相反)。
表2-7从高到低列出了PHP所有运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
表2-7 运算符优先级
下面结合前面所用到的操作符号来完成一项需要综合使用它们的任务:
运行结果如图2-17所示。
图2-17 综合运算符的应用