2.5 控制运算——表达式和运算符
表达式和运算符
一个复杂的PHP程序往往是由大量的表达式构成的,而运算符则是表达式的核心。只有掌握了PHP表达式和运算符的用法,才能够更好地使用PHP语言进行开发设计。本节将详细讲解PHP中运算符的特点及用法。
2.5.1 算术运算符
算术运算符主要用于处理算术运算操作。PHP提供的算术运算符及作用如表2-11所示。
表2-11 PHP提供的算术运算符
应用算术运算符的示例代码如下:
代码2-21光盘\codes\第2章\2.5\arithmetic.php
<?php $a = 5; $b = 3; echo "a=".$a."\tb="."$b"."<br>"; echo "a+b=".($a+$b)."<br>"; echo "a-b=".($a-$b)."<br>"; echo "a*b=".$a*$b."<br>"; echo "a/b=".$a/$b."<br>"; echo "a%b=".$a%$b."<br>"; $a++; //变量a自加1 $b--; //变量b自减1 echo "a=".$a."\tb="."$b"; ?>
该程序被执行时,得到结果如图2-25所示。
图2-25 算术运算符的应用
在这里我们需要着重强调一下自加运算符“++”和自减运算符“--”的用法。通过表2-11的介绍我们已经知道,虽然这两个运算符放在变量前面或者后面都可以,但实际的运算过程却有所不同。其区别在于:当运算符位于变量后面时,先返回变量值然后再自加(或自减);当运算符位于变量前面时,先自加(或自减)然后再返回变量值。
2.5.2 赋值运算符
赋值运算符主要用于处理表达式的赋值操作。在本书前面很多例子中都应用了一个最基本的赋值运算符“=”,然而在PHP中不仅仅只有这一种赋值运算符。PHP提供的赋值运算符及其用法如表2-12所示。
表2-12 PHP提供的赋值运算符
应用算术运算符的示例代码如下:
代码2-22光盘\codes\第2章\2.5\ assignment.php
<?php $a = 11; echo "a = ".$a."<br>"; echo"a+=5=".($a+=5)."<br>"; //语句执行完毕后a的值变为16 echo"a-=3=".($a-=3)."<br>"; //语句执行完毕后a的值变为13 echo"a*=2=".($a*=2)."<br>"; //语句执行完毕后a的值变为26 echo"a/=4=".($a/=4)."<br>"; //语句执行完毕后a的值变为6.5 echo"a%=6=".($a%=6)."<br>"; //语句执行完毕后a的值变为0 echo"a.=abc=".$a.=abc; //语句执行完毕后a的值变为0abc ?>
该程序被执行时,得到结果如图2-26所示。
图2-26 赋值运算符的应用
2.5.3 位运算符
位运算符在PHP的开发过程中应用并不是非常广泛,主要应用于整型数据的运算过程。如果表达式包含位运算符,运算时就会先将各个整型运算数转换为相应二进制格式,然后再进行位运算。PHP提供的位移运算符及其用法如表2-13所示(这里假设参与运算的变量都为整型数据)。
表2-13 PHP提供的位运算符
应用算术运算符的示例代码如下:
<?php $a=5; //运算时会把5转换为二进制码101 $b=3; //运算式会把3转换为二进制码11 echo($a&$b)."<br>"; //输出101和11做与操作后转换为十进制码的结果 echo($a|$b)."<br>"; //输出101和11做或操作后转换为十进制码的结果 echo($a^$b)."<br>"; //输出101和11做异或操作后转换为十进制码的结果 echo(~$a)."<br>"; //输出101做非操作后转换为十进制码的结果 echo($a<<$b)."<br>"; //输出101向左位移11个单位后转换为十进制码的结果 echo($a>>$b)."<br>"; //输出101向右位移11个单位后转换为十进制码的结果 ?>
代码2-23光盘\codes\第2章\2.5\bitwise.php
该程序被执行时,得到结果如图2-27所示。
图2-27 位运算符的应用
Note
● 在32位操作系统中使用位运算符编程的时候,右移不要超过32位,左移不要超过32位,否则都会发生数据溢出。
● 在开发过程中如果一定要使用位运算符,建议开发人员保证所有参与位运算的数据都为整型数据,否则运算结果可能产生错误。
● 位运算符也可用于包含字符串的表达式,但是极少情况会这么用,所以这里就不详细介绍运算规则了。感兴趣的读者可以自行研究PHP有关字符串的位运算。
2.5.4 比较运算符
比较运算符用于比较两个数据的值并返回一个布尔类型的结果。PHP提供的比较运算符及其用法如表2-14所示。
表2-14 PHP提供的比较运算符
应用比较运算符的示例代码如下:
代码2-24光盘\codes\第2章\2.5\comparison.php
<?php $a = 5; $b = 3; $c = "5"; $d =5.0; echo var_dump($a==$b)."<br>"; echo var_dump($a===$d)."<br>"; echo var_dump($a!=$b)."<br>"; echo var_dump($a!==$d)."<br>"; echo var_dump($a<$b)."<br>"; echo var_dump($a>$b)."<br>"; echo var_dump($a<=$b)."<br>"; echo var_dump($a>=$b); ?>
该程序被执行时,得到结果如图2-28所示。
图2-28 比较运算符的应用
2.5.5 逻辑运算符
逻辑运算符用于处理逻辑运算操作,PHP提供的逻辑运算符及其用法如表2-15所示。
表2-15 PHP提供的逻辑运算符
应用逻辑运算符的示例代码如下:
代码2-25光盘\codes\第2章\2.5\logical.php
<?php $a = true; $b = false; echo var_dump($a&&$b)."<br>"; echo var_dump($a||$b)."<br>"; echo var_dump($a xor $b)."<br>"; echo var_dump(!$a); ?>
该程序被执行时,得到结果如图2-29所示。
图2-29 逻辑运算符的应用
2.5.6 字符串运算符
字符串运算符用于处理针对字符串的相关操作。在PHP中只提供了一个字符串运算符,那就是“.”,该运算符用于连接两个字符串。应用格式为:
$a.$b
这个运算符我们已经在前面的很多例子中应用了,它的使用方法比较简单,这里就不给出详细的示例代码了。
2.5.7 数组运算符
数组运算符应用于针对数组的一些相关操作。PHP提供的数组运算符及其用法如表2-16所示。
表2-16 PHP提供的数组运算符
应用数组运算符的示例程序如下:
代码2-26光盘\codes\第2章\2.5\array.php
<?php $a = array("1"=>one,"2"=>two); $b = array("color"=>"red","shape"=>"round"); $c = array("1"=>"one","2"=>"two"); echo var_dump($a+$b)."<br>"; echo var_dump($a==$c)."<br>"; echo var_dump($a===$b)."<br>"; echo var_dump($a!=$b)."<br>"; echo var_dump($a!==$c); ?>
该程序被执行时,得到结果如图2-30所示。
图2-30 逻辑运算符的应用
Note
本例是应用“array()”来定义数组并进行赋值的。关于“array()”的用法读者可以参考本书第4章的相关介绍。
2.5.8 类型运算符
PHP 5开始提供了一个类型运算符“instanceof”,这个运算符可以用来判断指定对象是否来自指定的类。应用类型运算符的示例代码如下:
代码2-27光盘\codes\第2章\2.5\type.php
<?php class A{} //定义一个类A $a=new A(); //实例化一个类A的对象a var_dump($a instanceof A); //使用类型运算符判断a是否为类A的实例对象 ?>
该程序被执行时,得到结果如图2-31所示。
图2-31 类型运算符的应用
2.5.9 错误抑制运算符
对于一些PHP表达式会产生错误,而我们又不想得到错误信息的情况,就要用到错误抑制运算符。当表达式的前面被加上“@”这个运算符以后,该表达式可能产生的任何错误信息都会被忽略。应用错误抑制运算符的示例代码如下:
代码2-28光盘\codes\第2章\2.5\errorControl.php
<?php $a = 5; $b = 0; echo $a/$b; ?>
对于上面给出的代码,如果没有加入错误抑制运算符,运行后将会显示错误信息如图2-32所示。
图2-32 错误抑制运算符的应用
如果将代码2-28中的“echo $a/$b;”语句改写为“echo @($a/$b);”后,再次运行这个程序的时候,就不会得到任何错误信息。
Note
错误抑制运算符只可作用于表达式,不可作用于函数或者类。如果加入了错误抑制运算符,一些可能会引起PHP脚本中止的错误信息也不会被显示出来。所以为了调试方便,我们应该谨慎使用这个运算符。
2.5.10 执行运算符
PHP还提供了一种特殊的运算符——执行运算符“` `”(键盘数字1左边的按键)。使用了这个运算符以后,该运算符内的字符串将会被当做DOS命令行来处理。应用执行运算符的示例代码如下:
代码2-29光盘\codes\第2章\2.5\execute.php
<?php $a=`dir c:\\appserv`; //列出c:\\appserv文件夹下的目录并赋给变量a echo $a; ?>
该程序被执行时,得到结果如图2-33所示。
图2-33 执行运算符的应用
Note
由于这里列出的是当前程序所在电脑c:\\appserv文件夹下的目录,所以读者所得到的结果可能与上图有所不同。
2.5.11 判断运算符
判断运算符与前面介绍的其他运算符有所不同,它是唯一的一个三元运算符。该运算符的应用格式为:
表达式1?表达式2:表达式3
如果表达式1的值为TRUE则计算表达式2,否则计算表达式3。应用判断运算符的示例代码如下:
代码2-30光盘\codes\第2章\2.5\ternary.php
<?php $a = 4; $b = 3; $c=$a>$b?100:200; //$a>$b为TRUE,所以取100 echo $c; ?>
当这段程序被执行的时候,输出变量c的值为100。
2.5.12 运算符的优先级
一个复杂的表达式往往包含了多种运算符,各个运算符优先级的不同决定了其被执行的顺序也不一样。高优先级的运算符所在子表达式会先被执行,而低优先级的运算符所在子表达式会后被执行。PHP中各运算符的优先级由高到低的顺序如表2-17所示。
表2-17 PHP中运算符优先级顺序表
对于上表所给出的各个运算符的优先级,我们不必刻意全部记住。如果在开发过程中需要使用复杂的表达式运算,可以通过添加“()”来限制各子表达式运算的优先级。