PHP Comparision Operater
来源:互联网 发布:下载天猫淘宝商城 编辑:程序博客网 时间:2024/05/17 04:30
5.4 运算符
和其他的程序语言一样,PHP也有许多运算符。运算符可以用来处理数字、字符串及其他的比较运算和逻辑运算等。本节主要介绍常用的运算符,以及运算符的优先级。
5.4.1 常用的运算符
PHP有三种类型的运算符,它们是:
● 一元运算符,只运算一个值,例如:!(取反运算符)或++(加一运算符)。
● 二元运算符,PHP 支持的大多数运算符都是这种,例如:$a + $b。
● 三元运算符,即? :,它被用来根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序路线中选择。
PHP中常用的运算符有算术运算符、赋值运算符、比较运算符、三元运算符、错误控制运算符、递增/递减运算符、逻辑运算符、字符串运算符、数组运算符等。下面我们分别介绍。
1.算术运算符
PHP的算术运算符如表5-2所示。
表5-2 算术运算符
例 子
名 称
结 果
-$a
取反
$a 的负值
$a + $b
加法
$a 和 $b 的和
$a - $b
减法
$a 和 $b 的差
$a * $b
乘法
$a 和 $b 的积
$a / $b
除法
$a 除以 $b 的商
$a % $b
取模
$a 除以 $b 的余数
注意,除号(/)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
2.赋值运算符
基本的赋值运算符是=,它意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,$a = 3的值是 3。例如:
<?php
$a = ($b = 4) + 5; // 变量$a的值是:9
?>
在基本赋值运算符之外,还有适合于所有二元算术和字符串运算符的“组和运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
<?php
$a = 3;
$a += 5; // 等价于:$a = $a + 5;
$b = "Hello ";
$b .= "world!"; //等价于: $b = $b . "world!";
?>
3.比较运算符
比较运算符,允许对两个值进行比较,PHP的比较运算符如表5-3所示。
表5-3 比较运算符
例 子
名 称
结 果
$a == $b
等于
True,如果 $a 等于 $b
$a === $b
全等
True,如果 $a 等于 $b,并且它们的类型也相同(PHP 4 引进)
$a != $b
不等
True,如果 $a 不等于 $b
$a <> $b
不等
True,如果 $a 不等于 $b
$a !== $b
非全等
True,如果 $a 不等于 $b,或者它们的类型不同(PHP 4 引进)
$a < $b
小于
True,如果 $a 严格小于 $b
$a > $b
大于
True,如果 $a 严格 $b
$a <= $b
小于等于
True,如果 $a 小于或者等于 $b
$a >= $b
大于等于
True,如果 $a 大于或者等于 $b
如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。多类型的比较规则如表5-4所示。
表5-4 多类型的比较规则
运算数1的类型
运算数2的类型
结 果
null或string
string
将NULL转换为"",进行数字或词汇比较
boolean或null
任何其他类型
转换为boolean,False < True
object
object
内置类可以定义自己的比较,不同类不能比较,相同类和数组比较其属性
string、resource string或number
resource或number
将字符串和资源转换成数字,按普通数字比较
array
array
具有较少成员的数组较小,如果运算数1中的键不存在于运算数2中则数组无法比较,否则逐个值比较
array
任何其他类型
array总是更大
object
任何其他类型
object总是更大
4.三元运算符
三元运算符是?:,语法如下:
(expr1) ? (expr2) : (expr3)
首先对expr1求值,若结果为True,则表达式(expr1) ? (expr2) : (expr3)的值为 expr2,否则其值为expr3。例如:
<?php
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
?>
首先判断$_POST['action']变量是否为空值,若是则给$action赋值为default,否则将$_POST['action']变量的值赋值给$action。这个三元运算符的功能和if...else语句很相似,我们可以将上面的代码改写成以下的代码:
<?php
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
5.错误控制运算符
PHP支持一个错误控制运算符@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
@运算符只对表达式有效。那么,何时使用此运算符呢?一个简单的规则就是,如果能从某处得到值,就能在它前面加上@运算符。例如,可以把它放在变量,函数和include()调用,常量等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。
对于如下的代码:
<?php
$Connid = mysql_connect ("localhost","username","pwd");
if ( $Connid )
echo "连接成功!";
else
echo "连接失败!";
?>
如果mysql_connect()执行失败,将显示系统的错误提示,而后继续执行下面的程序。如果不想显示系统的错误提示,并希望失败后立即结束程序,则可以改写上面的代码如下:
<?php
$Connid = @mysql_connect ("localhost","username","pwd") or die ("不能连接数据库服务器");
?>
在mysql_connect()函数前加上@运算符来屏蔽系统的错误提示,同时使用die()函数给出自定义的错误提示,然后立即退出程序。这种用法在大型程序中很常见。
6.递增/递减运算符
PHP支持C风格的前/后递增与递减运算符,如表5-5所示。
表5-5 递增/递减运算符
例 子
名 称
效 果
++$a
前加
$a的值加一,然后返回$a
$a++
后加
返回$a,然后将$a的值加一
--$a
前减
$a的值减一,然后返回$a
$a--
后减
返回$a,然后将$a的值减一
注意,递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是1。
7.逻辑运算符
PHP 的逻辑运算符,如表5-6所示。
表5-6 逻辑运算符
例 子
名 称
结 果
$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
“与”和“或”有两种不同形式运算符,它们运算的优先级不同,&&和||优先级高。
8.字符串运算符
有两个字符串运算符。第一个是连接运算符(.),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(.=),它将右边参数附加到左边的参数后。例如:
<?php
$a = "Hello ";
$a = $a . "World!"; //此时 $a是 "Hello World!"
$b = "Hello ";
$b .= "World!"; //此时 $b 是 "Hello World!"
?>
9.数组运算符
PHP 的数组运算符,如表5-7所示。
表5-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
+运算符把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。下面通过一个实例来看一下如何用+运算符联合两个数组:
代码清单5-6 用+运算符联合两个数组(ex5_06.php)
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b;
echo "数组 /$a 和 /$b 联合之后 : <br>";
var_dump($c);
?>
在浏览器中浏览此文件,结果如图5-6所示。
图5-6 浏览ex5_06.php
可以看到,在联合之后的数组中,键“a”的值是“apple”,而不是“pear”,同样,键“b”的值是“banana”,而不是“strawberry”,但是键“c”的值是“cherry”。
在上面的代码中,使用了var_dump()函数,此函数用于显示一个或多个表达式的结构信息,包括表达式的类型与值。对于数组将递归地展开值。
5.4.2 运算符的优先级
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1 + 5 * 3的结果是16而不是18是因为乘号(*)的优先级比加号(+)高。必要时可以用括号来强制改变优先级。例如(1 + 5) * 3的值为18。使用括号也可以增强代码的可读性。如果运算符优先级相同,则使用从左到右的左结合顺序(左结合表示表达式从左向右求值,右结合相反)。
表5-8从高到低列出了PHP所有运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
表5-8 运算符优先级
结合方向
运 算 符
附加信息
非结合
new
new
左
[
array()
非结合
++ --
递增/递减运算符
(续)
结合方向
运 算 符
附加信息
非结合
! ~ - (int) (float) (string) (array) (object) @
类型
左
* / %
算数运算符
左
+ - .
算数运算符和字符串运算符
左
<< >>
位运算符
非结合
< <= > >=
比较运算符
非结合
== != === !==
比较运算符
左
&
位运算符和引用
左
^
位运算符
左
|
位运算符
左
&&
逻辑运算符
左
||
逻辑运算符
左
? :
三元运算符
右
= += -= *= /= .= %= &= |= ^= <<= >>=
赋值运算符
左
and
逻辑运算符
左
xor
逻辑运算符
左
or
逻辑运算符
左
,
多处用到
- PHP Comparision Operater
- PHP 5.2.0 Memory Manager Signed Comparision Vulnerability
- NULL Comparision
- class object assign operater
- 运算符(Operater)
- python--file operater
- c++ 中operater delete和operater new重载
- Reserved words comparision
- Programming Languages Comparision
- String comparision Operators
- Overall Comparision With WCDMA
- 重载运算符operater用法
- Java WebService Pack Comparision Matrix
- MicroStrategy Business Objects Cognos comparision
- Comparision between several algebra libraries
- ES6之Spread Operater拷贝对象
- JavaServer Faces vs tapestry a head-to-head comparision
- ADO.Net comparision of approachs of update database
- 13_JavaWeb综合实例
- 在当前页面如何插入头像。
- 内核定时器的使用
- 17-2 运用指针交换了a,b的地址,也就交换了a,b的数值
- Linux 连线跟踪流程整理(linux-2.6.31)
- PHP Comparision Operater
- 个性的桌面电子时钟
- Lua入门 - helloworld
- 《看河南坟头》
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- 美媒评出2012年科技领域十大败笔
- netfilter之conntrack笔记
- 使用ctags出现的问题
- 利用jiffies计算代码的运行时间