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

逻辑运算符

,

多处用到

原创粉丝点击