PHP运算符

2019年10月6日12:30:46 1 1,828
摘要

PHP学习笔记:PHP运算符。知识来源:《PHP从零基础到项目实战》——未来科技编著

PHP运算符

运算符是用来对变量、常量和数据进行计算的符号,它可以通过一个或多个值(即表达式)产生另一个值。因此,任何能够返回一个值的结构都是运算符,而那些没有返回值的就不是运算符,如函数可以视为一个运算符,而echo命令就不是一个运算符。

PHP提供了以下三种类型的运算符。

  • 一元运算符,只运算一个值,如!(反运算符)或++(递加运算符)。
  • 二元运算符,PHP支持的大多运算符都是这种。
  • 三元运算符:?:。根据一个表达式在另两个表达式中进行选择计算,是条件语句的简化应用。注意,为了避免误用,建议把整个三元表达式放在括号里。

算术运算符

算术运算符是用来处理四则运算的符号,在数学计算中应用比较多。常用算术运算符如下表所示。

算术运算符 说明
- 取反。如-$a,表示变量$a的负值
+ 加法。如$a+$b
- 减法。如$a-$b
* 乘法。如a*b
/ 除法。如$a/$b
% 取模。如$a%$b,获得$a除以$b的余数

赋值运算符

基本的赋值运算符是=。它实际上就是把右边表达式的值赋给左边的运算数。

赋值运算表达式的值也就是所赋的值。例如,“$a=3”的值时3,因此下面写法也是正确的:

<?php 
$a = ($b = 4) + 5;
?>

在上面的代码中,变量$a的值为9,而变量$b的值就成了4.

在基本赋值运算符之外,还有适合于所有二元算术、数组集合和字符串运算符的组合运算符,如下表所示。

组合运算符 说明
.= 先连接后赋值。如$a.=$b,等于$a=$a.$b
+= 先加后赋值。如$+=$b,等于$a=$a+$b
-= 先减后赋值。如$a-=$b,等于$a=$a-$b
*= 先乘后赋值。如$a*=$b,等于$a=$a*$b
/= 先除后赋值。如$a/=$b,等于$a=$a/$b

字符串运算

字符串运算有以下两种:

  • 连接运算符(.),返回其左、右两个参数连接后的字符串。
  • 连接赋值运算符(.=),将右边参数附加到左边参数后。如下:
    <?<?php 
    $a = "Hello ";
    $b = $a . "World!";				//$b ="Hello World!"
    $a = "Hello ";
    $a .= "World!";					//$a - "Hello World!"
     ?>

位运算符

位运算符允许对整型数中指定的位进行求值和操作。如果左右两个参数都是字符串,则位运算符将操作字符的ASCII值。PHP中的位运算符说明如下表所示。

位运算符 说明
& 按位与(And)。如$a &$b,将把$a和$b 中都为1的位设为1
| 按位或(Or)。如$a|$b,将把$a或者$b中为1的位设为1
^ 按位异或(Xor)。如$a^$b,将把$a和$b中不同的位设为1
~ 按位非(Not)。如~$a,将$a中为0的位设为1,反之亦然
<< 左移。如$a<<$b,将$a中的位向左移动$b次(每一次移动都表示乘以2)
>> 右移。如$a>>$b,将$a中的位向右移动$b次(每一次移动都表示除以2)

示例:在下面代码中使用位运算符对变量中的值进行位运算操作。

<?<?php 
echo 12 ^9;			//输出为5
echo "12" ^ "9";		//输出退格字符(ascii 8)
echo "hallo" ^ "hello";	//输出ASCII值#0 #4 #0 #0 #0
echo 2 ^ "3";			//输出1
echo "2" ^ 3;			//输出1
?>

比较运算符

比较运算符允许对两个值进行比较,返回结果为布尔值。如果比较结果为真,则返回值为True,否则返回值为False。PHP中的比较运算符说明如下表:

比较运算符 说明
== 等于。如$a==$b,返回值等于True,则说明$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,则说明$a严格小于$b
> 大于。如$a>$b,返回值等于True,则说明$a严格大于$b
<= 小于等于。如$a<=$b,返回值等于True,则说明$a小于或者等于$b
>= 大于等于。如$a>=$b,返回值等于True,则说明$a大于或者等于$b
<=> 太空船运算符(组合比较符)。如$a<=>$b,当$a小于、等于、大于$b时分别返回一个小于、等于、大于0的integer值。PHP7开始支持
?? NULL合并操作符。如$a??$b??$c,从左往右第一个存在且不为NULL的操作数。如果都没有定义且不为NULL,则返回 NULL。PHP7开始支持

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于switch语句。例如:

<?php 
var_dump(0 == "a");			//0 == 0 -> True
var_dump("1" == "01");			//1 == 1 -> True
var_dump("1" == "1e0");		//1 == 1 -> True
?>

逻辑运算符

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

逻辑运算符 说明
and 逻辑与。如果$a 与$b 都为 True,则$a and $b 返回值等于 True
&& 逻辑与。如果$a 与$b 都为 True,则$a && $b 返回值等于 True
or 逻辑或。如果$a 或$b 有一个为 True,则$a or $b 返回值等于 True
|| 逻辑或。如果$a 或$b 有一个为 True,则$a || $b 返回值等于 True
xor 逻辑异或。如果$a 或$b,有一个为 True,另一个为 False,则$a xor $b 返回值等于 True
! 逻辑非。如果$a 为 True,则 !$a 返回值等于 False

示例: 下面代码中的foo()函数不会被调用,因为它们被运算符“短路”了。

<?php
$a = False && foo();
$b = True || foo();
$c = (False and foo());
$d = (True or foo());
?>

错误控制运算符

PHP 支持控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略。如果激活track_errors特性,表达式所产生的任何错误信息都被存放在变量php_errormsg中。例如:

<?php
$a = 1 / 0;
?>

运行上面代码,则会产生一个异常,并在浏览器中显示出来。如果要避免错误信息显示在浏览器中,则可以在表达式前面添加@运算符。例如:

<?php
$a = @(1 / 0);
?>

注意: @运算符只对表达式有效。简单说,如果能从某处得到值,就能在它前面加上@ 运算符。例如,可以把它放在变量、函数和include()调用、常量等之前。不能把它放在函数或类的定义之前,也不能用于条件结构前。

其他运算符

1. 三元运算符

三元运算符的功能与if-else语句相同,但它在一行中书写,代码精练、执行效率高。其语法格式如下:

(expr1)?(expr2):(expr3);

如果条件表达式 expr1 的求值为真,则执行表达式 expr2,并发牛其值;否则执行表达式 expr3,并返回其值。

可以省略三元运算符中间表达式 expr2。其语法格式如下:

expr1 ?: expr3

如果条件表达式 expr1 的求值为真,则返回 expr1 的值,否则返回表达式 expr3 的值。

示例: 下面代码声明 4 个变量 a、b、c、d,然后比较相邻两个变量的值,最后输出一个字符 C。

<?php
$a=1;$b=2;$c=3;$d=4;
echo $a<$b?'A':$b<$c?'B':$c<$d?'C':'D';
?>

上面代码是一个连续嵌套的条件运算。如果不细看,很容易出错,因为三元条件运算符的结合顺序是从左到右,上面表达式可以分解为如下形式:

echo $a < $b ? 'A' : $b;           //第一步比较,返回结果字符'A'
echo 'A' < $c ? 'B' : $c;           //第二步比较,返回结果字母'B'
echo 'B' < $d ? 'C' : 'D';          //第三步比较,返回结果字母'C'

字符与数字比较时,将字符转换为数字再进行大小比较,字符转换为数字为 0。

注意: 嵌套使用三元字符,可读性不是很好,建议使用 if-else 语句实现。

2. 递增和递减运算符

递增和递减运算符有以下 4 种形式,简单说明如下表所示。

运算符 名称 说明
++$a 前加 $a 的值加 1,然后返回 $a
$a++ 后加 返回 $a,然后将 $a 的值加 1
$a 前减 $a 的值见 1,然后返回 $a
$a-- 后减 返回 $a,然后将 $a 的值减 1

示例: 下面的代码比较递增变量 $i 的不同用法,导致循环次数不同。

<?php
for ($i = 0; $i++ <= 10;) {
    echo $i." ";
}
echo "<br>";
for ($i = 0; ==$i <= 10;) {
    echo $i." ";
}
?>

第一次循环输出:1 2 3 4 5 6 7 8 9 10 11,第二次循环输出:1 2 3 4 5 6 7 8 9 10。可以看到第二次循环少了一次循环,因为变量 $i 递增后再进行比较,导致出发停止循环的条件。

运算符的优先级和结合方向

所谓运算符的优先级,是指在表达式中哪一个运算符先计算,哪一个运算符后计算。如数学四则运算中的“先乘除,后加减”,就说明乘除运算符的优先级高于加减运算符。 PHP 的运算符在运算中遵循的规则是:优先级高的操作先执行,优先级低的操作后执行,同一优先级的操作,按照从左到右的顺序执行。

注意: 小括号内的运算优先级最高。因此可以通过小括号主动改变表达式中运算符的运算优先级。

冰凝梦想公众号

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • 叶忠文博客 叶忠文博客

      有一个程序大师 :mrgreen: