PHP从入门到精通(第5版)
上QQ阅读APP看书,第一时间看更新

3.6 PHP运算符

运算符是用来对变量、常量或数据进行计算的符号,它对一个值或一组值执行一个指定的操作。PHP的运算符主要包括算术运算符、字符串运算符、赋值运算符、位运算符、逻辑运算符、比较运算符、递增或递减运算符和条件运算符,这里只介绍一些常用的运算符。

3.6.1 算术运算符

算术运算符(Arithmetic Operators)是处理四则运算的符号,在数字的处理中应用得最多。常用的算术运算符如表3.11所示。

表3.11 常用的算术运算符

说明

在算术运算符中使用%求余,如果被除数($a)是负数,那么取得的结果也是一个负值。

【例3.17】本例分别使用上述几种算术运算符进行运算,实例代码如下:(实例位置:资源包\TM\sl\3\17

    <?php
        $a = -100;                             //声明变量$a
        $b = 50;                               //声明变量$b
        $c = 30;                               //声明变量$c
        echo "\$a = ".$a.",";                  //输出变量$a
        echo "\$b = ".$b.",";                  //输出变量$b
        echo "\$c = ".$c."<p>";                //输出变量$c
        echo "\$a + \$b = ".($a + $b)."<br>";  //计算变量$a加$b的值
        echo "\$a - \$b = ".($a - $b)."<br>";  //计算变量$a减$b的值
        echo "\$a * \$b = ".($a * $b)."<br>";  //计算$a乘$b的值
        echo "\$a / \$b = ".($a / $b)."<br>";  //计算$a除以$b的值
        echo "\$a % \$c = ".($a % $c)."<br>";  //计算$a和$c的余数,被除数为-100
    ?>

运行结果如图3.11所示。

图3.11 算术运算符的简单应用

3.6.2 字符串运算符

字符串运算符只有一个,即英文的句号“.”,它将两个字符串连接起来,结合成一个新的字符串。使用过C语言或Java语言的读者应注意,这里的“+”只用作赋值运算符,而不能用作字符串运算符。

【例3.18】本例用于对比“.”和“+”两者之间的区别。当使用“.”时,变量$m和$n两个字符串组成一个新的字符串3.1415926r*r1;当使用“+”时,PHP会认为这是一次运算。如果“+”的两边有字符类型,则自动转换为整型;如果是字母,则输出为0;如果是以数字开头的字符串,则会截取字串头部的数字,再进行运算。实例代码如下:(实例位置:资源包\TM\sl\3\18

    <?php
        $n = "3.1415926r*r";  //声明一个字符串变量,以数字开头
        $m = 1;               //声明一个整型变量
        $nm = $n.$m;          //使用“.”运算符将两个变量连接
        echo $nm."<br>";
        $mn = $n + $m ;       //使用“+”运算符将两个变量连接
        echo $mn . "<br>" ;
    ?>

结果为:3.1415926r*r1

4.1415926

3.6.3 赋值运算符

赋值运算符是把基本赋值运算符“=”右边的值赋给左边的变量或者常量。在PHP中的赋值运算符如表3.12所示。

表3.12 常用赋值运算符

3.6.4 递增或递减运算符

算术运算符适合在有两个或者两个以上不同操作数的场合使用,但是,当只有一个操作数时,使用算术运算符是没有必要的。这时,就可以使用递增运算符“++”或者递减运算符“--”。

递增或递减运算符有两种使用方法,一种是将运算符放在变量前面,即先将变量作加1或减1的运算后再将值赋给原变量,叫作前置递增或递减运算符;另一种是将运算符放在变量后面,即先返回变量的当前值,然后变量的当前值作加1或减1的运算,叫作后置递增或递减运算符。

【例3.19】定义两个变量,将这两个变量分别利用递增和递减运算符进行操作,并输出结果。实例代码如下:(实例位置:资源包\TM\sl\3\19

    <?php
        $a = 6;
        $b = 9;
        echo "\$a = $a , \$b = $b<p>";
        echo "\$a++ =  " . $a++ ."<br>" ;     //先返回$a的当前值,然后$a的当前值加1
        echo "运算后\$a的值: ".$a."<p>" ;
        echo "++\$b = " . ++$b ."<br>" ;      //$b的当前值先加1,然后返回新值
        echo "运算后\$b的值: ".$b ;
        echo "<hr><p>";
        echo "\$a-- = " . $a-- ."<br>" ;      //先返回$n的当前值,然后$n的当前值减1
        echo "运算后\$a的值: ".$a."<p>" ;
        echo "\$b = " . --$b ."<br>" ;        //$n的当前值先减1,然后返回新值
        echo "运算后\$b的值: ".$b;
    ?>

运行结果如图3.12所示。

图3.12 递增和递减运算符

3.6.5 位运算符

位运算符是指对二进制位从低位到高位对齐后进行运算。在PHP中的位运算符如表3.13所示。

表3.13 位运算符

【例3.20】下面使用位运算符对变量中的值进行位运算操作。实例代码如下:(实例位置:资源包\ TM\sl\3\20

    <?php
       $m = 8 ;
       $n = 12 ;
       $mn = $m & $n ;  //位与
       echo $mn ." ";
       $mn = $m | $n ;  //位或
       echo $mn ." ";
       $mn = $m ^ $n ;  //位异或
       echo $mn ." ";
       $mn = ~$m ;      //位取反
       echo $mn ." ";
    ?>

结果为:8 12 4 -9

3.6.6 逻辑运算符

逻辑运算符用来组合逻辑运算的结果,是程序设计中一组非常重要的运算符。PHP的逻辑运算符如表3.14所示。

表3.14 PHP的逻辑运算符

在逻辑运算符中,逻辑与和逻辑或这两个运算符有4种运算符号(&&、and、||和or),其中属于同一个逻辑结构的两个运算符号(例如&&和and)之间却有着不同的优先级。

【例3.21】本例分别使用逻辑或中的运算符号||和or进行相同的判断,因为同一逻辑结构的两个运算符||和or的优先级不同,输出的结果也不同。实例代码如下:(实例位置:资源包\TM\sl\3\21

    <?php
        $i = true;           //声明一个布尔型变量$i,赋值为真
        $j = true;           //声明一个布尔型变量$j,赋值也为真
        $z = false;          //声明一个初值为假的布尔变量$z
        if($i or $j and $z)  //用or进行判断
             echo "true";    //如果if表达式为真,输出true
        else
             echo "false";   //否则输出false
        echo "<br>";
        if($i || $j and $z)  //用||进行判断
             echo "true";    //如果表达式为真,输出true
        else
             echo "false";   //如果表达式为假,输出false
    ?>

结果为:true

false

注意

可以看到,两个if语句除了or和||不同之外,其他完全一样,但最后的结果却正好相反。在实际应用中要多注意一下这样的细节。

3.6.7 比较运算符

比较运算符就是对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回true,如果为假,则返回false。PHP中的比较运算符如表3.15所示。

表3.15 PHP的比较运算符

其中,不太常见的是===和!==。$a===$b,说明$a和$b不只是数值上相等,而且两者的类型也一样。!==和===的意义相近,$a !==$b就是说$a和$b或者数值不等,或者类型不等。

【例3.22】本例使用比较运算符对变量中的值进行比较,设置变量$value="100",变量的类型为字符串型,将变量$value与数字100进行比较,会发现比较的结果非常有趣。其中使用的var_dump()函数是系统函数,作用是输出变量的相关信息。实例代码如下:(实例位置:资源包\TM\sl\3\22

    <?php
       $value="100";                  //声明一个字符串变量$value
       echo "\$value = \"$value\"";
       echo "<p>\$value==100: ";
       var_dump($value==100);         //结果为:bool(true)
       echo "<p>\$value==true: ";
       var_dump($value==true);        //结果为:bool(true)
       echo "<p>\$value!=null: ";
       var_dump($value!=null);        //结果为:bool(true)
       echo "<p>\$value==false: ";
       var_dump($value==false);       //结果为:bool(false)
       echo "<p>\$value === 100: ";
       var_dump($value===100);        //结果为:bool(false)
       echo "<p>\$value===true: ";
       var_dump($value===true);       //结果为:bool(true)
       echo "<p>(10/2.0 !== 5): ";
       var_dump(10/2.0 !==5);         //结果为:bool(true)
    ?>

运行结果如图3.13所示。

图3.13 比较运算符的应用

3.6.8 条件运算符

条件运算符(?:),也称为三目运算符,用于根据一个表达式在另外两个表达式中选择一个,而不是用来在两个语句或者程序中选择。条件运算符最好放在括号里使用。

【例3.23】下面应用条件运算符实现一个简单的判断功能,如果正确则输出“条件运算”,否则输出“没有该值”。实例代码如下:(实例位置:资源包\TM\sl\3\23

    <?php
       $value=100;                                  //声明一个整型变量
       echo ($value==true)?"条件运算": "没有该值";  //对整型变量进行判断
    ?>

结果为:条件运算

3.6.9 运算符的优先级

运算符的优先级是指在应用中哪一个运算符先计算,哪一个后计算,与数学的四则运算遵循的“先乘除,后加减”是一个道理。

PHP的运算符在运算中遵循的规则是:优先级高的运算先执行,优先级低的操作后执行,同一优先级的操作按照从左到右的顺序执行。也可以像四则运算那样使用小括号,括号内的运算最先执行。表3.16从高到低列出了运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

表3.16 运算符的优先级

这么多的级别,如果想都记住是不太现实的,也没有必要。如果写的表达式真的很复杂,而且包含了较多的运算符,不妨多使用括号,例如:

    <?php
        $a and (($b != $c) or (5 * (50 – $d)))
    ?>

这样就会减少出现逻辑错误的可能。