3.4 PHP运算符
运算符是数据操作的符号,是表达式另外一个重要组成部分。根据运算符功能的不同,可将PHP的运算符分为算术、赋值、位、比较、错误控制、执行、递增/递减、逻辑、字符串连接、条件等运算符。不同的运算符所需操作数的个数也不相同,根据运算符操作数个数的不同,可将运算符分为单目运算符、双目运算符和三目运算符。
3.4.1 算术运算符
PHP 算术运算符可以实现算术运算, PHP 中的算术运算符如表 3-2 所示。例如,程序calculator.php如下。
<?php
$num1 = -10;
$num2 = -4;
$num3 = $num1 % $num2;
$num4 = $num1 / $num2;
var_dump($num3); //输出:int(-2)
echo "<br/>";
var_dump($num4); //输出:float(2.5)
?>
3.4.2 递增/递减运算符
PHP中的递增/递减运算符如表3-3所示。例如,程序increase.php如下。
<?php
$num1 = 2;
$num2 = ++$num1; //$num1先自加1,然后再将结果赋值给$num2
$num3 = 2;
$num4 = $num3++; //先将$num3赋值给$num4,然后$num3自加1
echo '$num1 = ',$num1; //输出:$num1 = 3
echo "<br/>";
echo '$num2 = ',$num2; //输出:$num2 = 3
echo "<br/>";
echo '$num3 = ',$num3; //输出:$num3 = 3
echo "<br/>";
echo '$num4 = ',$num4; //输出:$num4 = 2
?>
3.4.3 赋值运算符
赋值运算符“=”是将“=”右边表达式的值赋给左边的变量。赋值运算符产生的表达式为赋值表达式,该表达式的值为“=”左边的变量值。例如,程序assign.php如下。
<?php
//$a值为9,$b值为4。整个表达式$a = ($b = 4) + 5的值为9
var_dump($a = ($b = 4) + 5); //输出:int(9)
echo "<br/>";
echo $a; //输出:9
echo "<br/>";
echo $b; //输出:4
?>
除此之外,PHP 还提供适合于所有二元算术养生法和字符串运算符的“组和运算符”:+=、-=、 *=、 /=、 %=、 .=等。这样可以在一个表达式中使用一个值(如$y)并把表达式的结果赋给另一个值(如$x)(见表3-4)。例如,程序combination.php如下。
<?php
$a = 5;
$a += 3;
echo $a; //$a的值为8
echo "<br/>";
$a *=2;
echo $a; //$a的值为16
echo "<br/>";
$a /=4;
echo $a; //$a的值为4
?>
3.4.4 比较运算符
比较运算符用来对两个表达式的值进行比较,比较的结果是一个布尔值(要么是TRUE,要么是FALSE)。如果表达式是数值,则按照数值大小进行比较;如果表达式是字符串,则按照每个字符所对应的ASCII值比较。表3-5所示为PHP中的比较运算符。例如,程序compare.php如下。
<?php
$a = 5;
$b = "5.0";
$c = 3;
var_dump($a==$b); //输出:bool(true)
echo "<br/>";
var_dump($a===$b); //输出:bool(false)
echo "<br/>";
var_dump($a!=$b); //输出:bool(false)
echo "<br/>";
var_dump($a!==$b); //输出:bool(true)
echo "<br/>";
var_dump($a<=$b); //输出:bool(true)
echo "<br/>";
var_dump($a>=$b); //输出:bool(true)
echo "<br/>";
?>
比较运算符会将类型不同的两个数据自动转换为相同类型的数据后再进行比较。例如程序 compare.php 中,5 和"5.0"进行比较时,将进行数据类型自动转换,将"5.0"和 5转换为同类型数据后再进行比较。
3.4.5 逻辑运算符
逻辑运算符对布尔型数据进行操作,并返回布尔型结果。表3-6所示为PHP中的逻辑运算符。例如,程序logic1.php如下。
<?php
$a = 3>2;
$b = 3>4;
var_dump($a&&$b); //输出:bool(false)
echo "<br/>";
var_dump($a||$b); //输出:bool(true)
echo "<br/>";
var_dump(!$a); //输出:bool(false)
echo "<br/>";
var_dump($a xor $b); //输出:bool(true)
echo "<br/>";
?>
逻辑表达式中后一部分的取值不会影响整个表达式的值时,为了提高程序效率,后一部分将不会进行任何数据运算。例如,表达式$a&&$b中,若$a的值为FALSE,则整个表达式的值为FALSE,此时$b表达式将不进行任何数据运算;表达式$a||$b中,若$a的值为TRUE,则整个表达式的值为TRUE,此时$b表达式将不进行任何数据运算。
例如,程序logic2.php如下。
<?php
$a = 3;
$b = 2;
$c = 2;
$a<0&&$b++>0; //由于$a<0不成立,因此逻辑与后的表达式将不再执行
$a>0&&$c++>0; //由于$a>0成立,因此逻辑与后的表达式将继续执行
echo $b; //输出结果为:2
echo "<br/>";
echo $c; //输出结果为:3
?>
3.4.6 字符串连接运算符
字符串连接运算符只有一个点运算符“.”,使用“.”运算符可以将两个字符串连接成一个字符串。例如,程序string.php如下。
<?php
echo "hello world!"."<br/>".date("Y年m月d日h时i分s秒");
?>
3.4.7 错误抑制运算符
当 PHP 表达式产生错误而又不想将错误信息显示在页面上时,可以使用错误抑制运算符“@”。将“@”运算符放置在PHP表达式之前,该表达式产生的任何错误信息将不会输出。这样做有以下两个好处。
(1)安全:避免错误信息外露,造成系统漏洞。
(2)美观:避免浏览器页面出现错误信息,影响页面美观。
例如,程序errorControl.php如下,该程序的运行结果如图3-12所示。
<?php
print $age; //显示变量未定义的notice信息
echo "<br/>";
@print $age; //@将屏蔽$age变量没有定义的notice信息
?>
注意:在程序errorControl.php 中,“@print $age”;语句中不能将print替换成echo,否则将出现程序解析错误:“Parse error: parse error in C:\wamp\www\2\sample.php on line 7”。
在出现数据库连接、打开文件流、除0等异常时,可以用@符号来抑制函数或表达式错误信息。例如,程序errorControl2.php如下。
<?php
@mysql_connect("localhost","root","");
@fopen("unknown.gif","r");
@$a = (5/0);
?>
“@”运算符不能屏蔽程序的解析错误。对初学者而言,一个简单的规则是:如果能从某条语句得到值,就可以在该语句前面加上“@”运算符。例如,可以把“@”运算符放在函数(如include()函数、mysql_connect()函数等)之前。
3.4.8 条件运算符
条件运算符的语法格式为:表达式1?表达式2:表达式3
由条件运算符组成的表达式称为条件表达式,条件表达式的执行过程为:如果表达式1 的值为TRUE,则整个条件表达式的值为表达式2的值;如果表达式1的值为FALSE,则整个条件表达式的值为表达式3的值。条件运算符中有3个操作数,因此条件运算符为三目运算符。例如,程序condition.php如下。
<?php
$a = 0.0;
$b = ($a==0)?"zero":"not zero";
echo $b; //输出:zero
?>
3.4.9 类型运算符
PHP 5提供了类型运算符instanceof,该运算符用于判断一个对象是否是某个类的对象。例如,程序instanceof.php如下。
<?php
class A{
}
class B{
}
$a = new A();
var_dump($a instanceof A); //输出:bool(true)
echo "<br/>";
var_dump($a instanceof B); //输出:bool(false)
?>
3.4.10 执行运算符
执行运算符使用反引号(`)(注意这不是单引号!一般是键盘上 ESC 下面的按键)。执行运算符尝试将反引号中的字符串内容作为操作系统系统命令来执行(如 Linux 的 shell 命令或Windows的DOS命令),并返回该系统命令的执行结果。例如,程序exec.php如下。
<?php
$cmd = `netstat -aon`;
print_r($cmd);
?>
3.4.11 位运算符
位运算符主要用于整型数据的运算,当表达式包含位运算符时,运算时会先将各整型数据转换为相应的二进制数,然后再进行位运算。PHP提供的位运算符如表3-7所示。例如,程序bit.php如下。
<?php
$a = 12; // 12=00001100
$b = 3; // 3=00000011
echo $a & $b; // 输出:0
echo "<br/>";
echo $a | $b; //输出:15
echo "<br/>";
echo $a ^ $b; //输出:15
echo "<br/>";
echo ~$a; // 输出:-13
echo "<br/>";
echo $a << $b; //输出:96
echo "<br/>";
echo $a >> $b; //输出:1
?>
3.4.12 运算符优先级
一个复杂的表达式往往包含了多种运算符,表达式运算时,运算符优先级的不同,各运算符执行的顺序也不相同,高优先级的运算符会先被执行,低优先级的运算符会后被执行。PHP中各运算符的优先级由高到低的顺序如表3-8所示。在实际编程过程中,使用括号“()”是避免优先级混乱的最有效方法。
共有条评论 网友评论