PHP语法基础篇(四):运算符

上篇文章学习了类型转换与常量的相关内容,本篇将记录运算符的学习过程。
运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。
运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。最后是唯一的三元运算符 ? :,可接受三个值;通常就简单称之为"三元运算符"。
PHP 将运算符分为以下几组:
  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 递增/递减运算符
  • 逻辑运算符
  • 位运算符
  • 字符串运算符
  • 数组运算符
  • 条件赋值运算符

一、算术运算符

算术运算符用于对数值执行常见的算术操作,例如加法、减法、乘法等。

算术运算符

名称

描述

+x

标识

根据情况将 x 转化为 int 或 float。

-x

取反

x 的负值。

x + y

加法

x 和 y 的和。

x - y

减法

x 和 y 的差。

x * y

乘法

x 和 y 的积。

x / y

除法

x 除以 y 的商。

x % y

取模

x 除以 y 的余数。

x ** y

求幂

x 的 y次方的值。

除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。

取模运算符的操作数在运算之前都会转换成 int 。

取模运算符 % 的结果和被除数的符号(正负号)相同。即 x % y 的结果和 x 的符号相同。


二、赋值运算符

基本的赋值运算符是"="。一开始可能会以为它是"等于",其实不是的。它实际上是把右边表达式的值赋给左边的运算数。

赋值运算符

等同于

描述

x = y

x = y

将左侧的操作数设置为右侧表达式的值。

x += y

x = x + y

加法赋值

x -= y

x = x - y

减法赋值。

x *= y

x = x * y

乘法赋值。

x /= y

x = x / y

除法赋值。

x %= y

x = x % y

取模赋值。

注意:赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。 

$b = 5; // $b 的值为 5
$a = $b; // 将 $b 的值赋值给 $a,则 $a 的值为 5
$b = -5; // $b 的值更改为 -5
echo $a; // 输出 "5",对 $b 值的更改并不会影响 $a 的值

PHP 支持引用赋值,使用 "$var= &$othervar;" 语法。引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。

$b = 5; // $b 的值为 5
$a = &$b; // $a 是 $b 的引用
$b = -5; // $b 的值更改为 -5
echo $a; // 输出 "-5",对 $b 值的更改会影响 $a 的值

三、比较运算符 

比较运算符用于比较两个值(数字或字符串)。

运算符

名称

例子

结果

==

等于

$x == $y

如果 $x 等于 $y,则返回 true。

===

全等

$x === $y

如果 $x 等于 $y,且它们类型相同,则返回 true。

!=

不等于

$x != $y

如果 $x 不等于 $y,则返回 true。

<>

不等于

$x <> $y

如果 $x 不等于 $y,则返回 true。

!==

不全等

$x !== $y

如果 $x 不等于 $y,或它们类型不同,则返回 true。

>

大于

$x > $y

如果 $x 大于 $y,则返回 true。

<

小于

$x < $y

如果 $x 小于 $y,则返回 true。

>=

大于或等于

$x >= $y

如果 $x 大于或等于$ y,则返回 true。

<=

小于或等于

$x

如果 $x 小于或等于 $y,则返回 true。

<=>

太空船运算符(组合比较符)

$x $y

根据 $x 是小于、等于或大于 $y,分别返回一个小于、等于或大于 0 的整数。

在 PHP 7 中引入。

 当两个操作对象都是数字字符串,或一个是数字另一个是数字字符串,就会自动按照数值进行比较。当比较时用的是 === 或 !==,则不会进行类型转换 —— 因为不仅要对比数值,还要对比类型。


四、递增 / 递减运算符

PHP 支持前/后递增与递减运算符。这些一元运算符允许将值递增或递减 1。

运算符

等同于

描述

++$x

前递增

将 $x 增加 1,然后返回 $x。

$x++

后递增

返回 $x,然后将 $x 增加 1。

--$x

前递减

将 $x 减少 1,然后返回 $x。

$x--

后递减

返回 $x,然后将 $x 减少 1。


五、逻辑运算符 

逻辑运算符用于组合条件语句。(在后续的流程控制篇章中将会看到逻辑运算符的使用)

运算符

名称

例子

结果

and

逻辑与

$x and $y

如果 $x 和 $y 都为 true,则返回 true。

or

逻辑或

$x or $y

如果 $x 或 $y 为 true,则返回 true。

xor

逻辑异或

$x xor $y

如果 $x 或 $y 为 true,但不同时为 true,则返回 true。

&&

逻辑与

$x && $y

如果 $x 和 $y 都为 true,则返回 true。

||

逻辑或

$x || $y

如果 $x 或 $y 为 true,则返回 true。

!

逻辑非

!$x

如果 $x 不为 true,则返回 true。

"与" 和 "或" 有两种不同形式运算符的原因是它们运算的优先级不同(本文最后会给出运算符优先级)。


六、位运算符 

位运算符允许对整型数中指定的位进行求值和操作。

运算符

名称

描述

$x & $y

And(按位与)

将把 $x 和 $y 中都为 1 的位设为 1。

$x | $y

Or(按位或)

将把 $x 和 $y 中任何一个为 1 的位设为 1。

$x ^ $y

Xor(按位异或)

将把 $x 和 $y 中一个为 1 另一个为 0 的位设为 1。

~ $x

Not(按位取反)

将 $x 中为 0 的位设为 1,反之亦然。

$x

Shift left(左移)

将 $x 中的位向左移动 $y 次(每一次移动都表示"乘以 2")。

$x >> $y

Shift right(右移)

将 $x 中的位向右移动 $y 次(每一次移动都表示"除以 2")。

<<>> 运算符的操作对象和结果始终都是整数。 


七、字符串运算符

有两个字符串运算符。第一个是连接运算符("."),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(".="),它将右边参数附加到左边的参数之后。

运算符

名称

例子

结果

.

连接

$txt1 . $txt2

将 $txt1 和 $txt2 连接起来。

.=

连接赋值

$txt1 .= $txt2

将 $txt2 追加到 $txt1 的末尾。


八、数组运算符 

数组运算符用于比较数组。

运算符

名称

例子

结果

+

联合

$x + $y

返回 $x 和 $y 的联合数组。

==

相等

$x == $y

如果 $x 和 $y 有相同的键/值对,则返回 true。

===

全等

$x === $y

如果 $x 和 $y 有相同顺序和类型的键/值对,则返回 true。

!=

不相等

$x != $y

如果 $x 不等于 $y,则返回 true。

<>

不相等

$x <> $y

如果 $x 不等于 $y,则返回 true。

!==

不全等

$x !== $y

如果 $x 和 $y 不全等,则返回 true。


九、条件赋值运算符 

条件赋值运算符用于根据条件设置值。

运算符

名称

例子

结果

?:

三元运算符

$x = expr1 ? expr2 : expr3

返回 $x 的值。

如果 expr1 为 TRUE,则 $x 的值为 expr2。

如果 expr1 为 FALSE,则 $x 的值为 expr3。

??

NULL合并运算符

$x = expr1 ?? expr2

返回 $x 的值。

如果 expr1 存在且不为 NULL,则 $x 的值为 expr1。

如果 expr1 不存在或为 NULL,则 $x 的值为 expr2。

在 PHP 7 中引入。


十、运算符优先级 

运算符优先级指定了两个表达式绑定得有多"紧密"。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号("*")的优先级比加号("+")高。必要时可以用括号来强制改变优先级。例如:(1+ 5) * 3 的值为 18。

如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=。

关联性仅对二(三)元操作符有意义。一元操作符是前缀或者后缀,所以不适用该概念。例如 !!$a 仅可分为 !(!$a)。

括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值