大道PHP
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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中运算符优先级顺序表

对于上表所给出的各个运算符的优先级,我们不必刻意全部记住。如果在开发过程中需要使用复杂的表达式运算,可以通过添加“()”来限制各子表达式运算的优先级。