PHP 运算符

2025 年 3 月 27 日 | 阅读 15 分钟

PHP 支持多种运算,如算术运算、逻辑运算、位运算、执行运算等。与其他编程语言一样,PHP 包含各种类型的运算符来执行这些运算。

PHP 运算符是用于在操作数上执行运算的符号。简单来说,运算符用于对变量或值执行运算。例如:

在上面的示例中,+ 是二元 + 运算符,10 和 20 是操作数,$num 是变量。评估后,输出将是 30。

PHP 运算符可分为以下几种形式:

我们也可以根据操作数对运算符进行分类。它们可以分为 3 种形式:

  • 一元运算符:作用于单个操作数,例如 ++、-- 等。
  • 二元运算符:作用于两个操作数,例如二元 +、-、*、/ 等。
  • 三元运算符:作用于三个操作数,例如 "?:"。

算术运算符

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

运算符名称示例说明
+加法$a + $b操作数的和
-减法$a - $b操作数的差
*乘法$a * $b操作数的积
/除法$a / $b操作数的商
%取模$a % $b操作数的余数
**幂运算$a ** $b$a 的 $b 次方

注意:幂运算符 (**) 已在 PHP 5.6 中引入。

让我们通过一个例子来更好地理解所有算术运算符。

示例

立即执行

输出

Addition is: 16
Subtraction is: 8
Multiplication is 48
Division is: 3
Modulus is: 0
Exponentiation is: 20736

赋值运算符

赋值运算符用于为不同变量赋值。基本赋值运算符是 "="。

运算符名称示例说明
=赋值$a = $b右操作数的值赋给左操作数。
+=加法后赋值$a += $b相当于 $a = $a + $b 的加法
-=减法后赋值$a -= $b相当于 $a = $a - $b 的减法
*=乘法后赋值$a *= $b相当于 $a = $a * $b 的乘法
/=除法后赋值
(商)
$a /= $b相当于 $a = $a / $b 的求商
%=除法后赋值
(余数)
$a %= $b相当于 $a = $a % $b 的求余数

让我们通过一个例子来理解所有赋值运算符的任务。

示例

立即执行

输出

Addition is: 36 
Result of Add and Assignment Operators: 60 
Result of Subtract and Assignment Operators: 36 
Result of Multiply and Assignment Operators: 864 
Result of Division and Assignment Operators: 36 
Result of Modulus and Assignment Operators: 12

按位运算符

位运算符用于对操作数执行位级操作。这些运算符允许对整数内的特定位进行求值和操作。

运算符名称示例说明
&$a & $b两个操作数中都为 1 的位被设置为 1,否则为 0。
|或(包含或)$a | $b$a 或 $b 中有任何一个为 1 的位被设置为 1。
^异或(独占或)$a ^ $b$a 或 $b 中只有一个是 1 的位被设置为 0。
~~$a为 1 的位设置为 0,为 0 的位设置为 1。
<<左移$a << $b将操作数 $a 的位左移 $b 位。
>>右移$a >> $b将 $a 操作数的位右移 $b 位。

让我们通过每个运算符的示例来更好地理解位运算符。

1. 位与 &(AND)

这是一个二元运算符,它作用于两个操作数。此运算符接受两个数字作为操作数,并对每一位应用 AND。如果两个数字的位都为 1,则 AND (&) 的结果为 1。

& 的语法

 

示例

立即执行

输出

2

说明

6 的二进制表示是 110,3 的二进制表示是 011。因此,它们的按位 & 将是 010。此处,变量 $x 的输入是 6,第二个输入变量 $y 是 3。因此,两个数字的按位 & 的输出将是 2。

2. 位或 |

它也作用于两个操作数,通过将两个数字作为操作数并对两个数字的每一位应用 OR。如果给定的两位中任何一位为 1,则按位 OR 的结果为 1,否则为 0。

语法

 

示例

立即执行

输出

7

说明

计算 6 和 3 的二进制表示后,结果将是 111。数字的二进制系统是基数 2,这意味着每个数字代表 2 的幂。

二进制数字 111 的十进制表示

二进制数字中的每个位置都代表 2 的幂,并从右侧的第 0 位开始。

1       1      1

(2²) (2¹) (2⁰) ← 2 的幂

让我们看看十进制值:

(1 × 2²) + (1 × 2¹) + (1 × 2⁰) = (1 × 4) + (1 × 2) + (1 × 1) = 4 + 2 + 1 = 7

3. (按位异或) ^

这同样是一个二元运算符,作用于两个操作数,也称为异或运算符。它接受两个数字作为操作数,并对给定两个数字的每一位应用 XOR。如果给定的两位都不同,则按位 XOR 的结果为 1。

语法

 

示例

立即执行

输出

5

说明

计算 6 和 3 的二进制表示后,结果的十进制值为 5。因为,当每个位不同时,XOR 给出 1,类似地,当位相同时,它给出 0。

4. (按位非) ~

这被称为一元运算符,它只作用于一个操作数。此运算符接受一个数字并反转其所有位。非运算符用波浪号("~")表示。

语法

其中,num 代表用户输入的数字。

例如,10 变成 01,01 变成 10。

示例

立即执行

输出

-6

说明

5 的二进制表示将是 00000101,应用 ~ 后将是 11111010,翻转所有位。因此,输出将是 -6。这在十进制表示中类似于 -(n + 1)。

5. 按位左移 <<

这也称为二元运算符,它作用于两个操作数。此运算符接受两个数字作为输入,并将第一个数字的位左移,第二个数字指示移位的位数。

语法

 

示例

立即执行

输出

48

说明

在上面的示例中,$FirstNum 的值是 6,第二个数字的值是 3。现在,执行左移操作。因此,6 乘以 2 三次。因此,我们将得到输出 6 x 2 x 2 x 2 = 48。

6. 按位右移 >>

它也被称为二元运算符,它作用于两个操作数。它接受两个数字并执行右移操作。它将第一个数字的位右移,第二个数字指示移位的位数。

语法

 

示例

立即执行

输出

0

说明

在上面的示例中,$FirstNum 的值是 6,$SecondNum 的值是 3。然后执行按位右移操作。因此,6 除以 2 三次。因此,我们得到 24/2=12,12/2=6,6/2=3。最后,当我们执行最后一次除法时,商是 3,这是准确的输出。


比较运算符

比较运算符允许比较两个值,例如数字或字符串。下面给出了比较运算符的列表:

运算符名称示例说明
==Equal$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,则返回 TRUE
<=>三元运算符$a <=>$b如果 $a 小于 $b,则返回 -1
如果 $a 等于 $b,则返回 0
如果 $a 大于 $b,则返回 1

让我们通过一个例子来理解所有比较运算符的任务。

示例

立即执行

输出

Case 1 : FirstNum is not equal to SecondNum 
Case 2 : FirstNum is greater than SecondNum 
Case 3 : FirstNum is not less than SecondNum 
Case 4 : FirstNum is not equal to SecondNum 
Case 5 : FirstNum is either greater than or equal to SecondNum 
Case 6 : FirstNum is neither less than nor equal to SecondNum

说明

在此 PHP 比较代码中,使用关系运算符(==、!=、>、<、>=、<=)比较两个数字 $FirstNum = 6 和 $SecondNum = 3。它检查相等性、不等性、大于、小于,并根据给定输入打印输出。


递增/递减运算符

递增和递减运算符用于增加和减少变量的值。这两个运算符都是一元的,因为它们只作用于一个操作数。这些运算符用于表示前缀或后缀表达式。

运算符名称示例说明
++递增++$a$a 的值增加 1,然后返回 $a
$a++返回 $a,然后将 $a 的值增加 1
--递减--$a$a 的值减少 1,然后返回 $a
$a--返回 $a,然后将 $a 的值减少 1

语法

 

示例

立即执行

输出

a = 7, b = 6
a = 7, b = 7
a = 2, b = 3
a = 2, b = 2

说明

后缀和前缀运算符在表达式中的作用不同。

  • 在后缀表达式中,在递增之前使用旧值。
  • 在前缀表达式中,在使用之前递增值。
  • 在这两种情况下,变量的最终值都是相同的,但它们的行为不同。

在第一个代码示例中,$a++ 在 $a 增加到 7 之前将原始值 (6) 分配给 $b,而 ++$a 先增加 $a,然后将 7 分配给 $b。类似地,对于递减运算符,$a-- 在 $a 减少到 2 之前将 3 分配给 $b,而 --$a 先减少 $a,然后将 2 分配给 $b。


逻辑运算符

逻辑运算符用于对操作数执行位级操作。这些运算符允许对整数内的特定位进行求值和操作。

运算符名称示例说明
并且$a and $b如果 $a 和 $b 都为真,则返回 TRUE
$a or $b如果 $a 或 $b 中有一个为真,则返回 TRUE
xor异或$a xor $b如果 $a 或 $b 为真但不是两者都为真,则返回 TRUE
!! $a如果 $a 不为真,则返回 TRUE
&&$a && $b如果 $a 和 $b 都为真,则返回 TRUE
||$a || $b如果 $a 或 $b 中有一个为真,则返回 TRUE
 

示例

立即执行

输出

CASE 1 : Both a and b are true 
CASE 2 : Both a and b are true 
CASE 3 : Either a or b is true 
CASE 4 : Either a or b is true 
CASE 5 : a is false 
CASE 6 : Either a or b is true, but not both

字符串运算符

字符串运算符用于对字符串执行操作。您可以使用 PHP 中的连接运算符(".")将两个或多个字符串连接起来,如下所示:

运算符名称示例说明
.拼接$a . $b连接 $a 和 $b
.=连接并赋值$a .= $b首先连接 $a 和 $b,然后将连接后的字符串赋给 $a,例如 $a = $a . $b
 

示例

立即执行

输出

Tpoint Tech!
Tpoint Tech!

数组运算符

数组运算符用于数组。基本上,这些运算符用于比较数组的值。

运算符名称示例说明
+并集$a + $y$a 和 $b 的并集
==相等$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
 

示例

立即执行

输出

array(4) {
  ["k"]=>
  string(9) "Aeroplane"
  ["l"]=>
  string(6) "Scooty"
  ["a"]=>
  string(10) "Helicopter"
  ["b"]=>
  string(4) "Ship"
}
bool(false)
bool(true)
bool(true)
bool(false)
bool(true)

类型运算符

类型运算符 instanceof 用于确定对象、其父类及其派生类是否为同一类型。基本上,此运算符确定对象属于哪个特定类。它用于面向对象编程。

示例

立即执行

输出

Charu is a developer.
bool(true) bool(false)

执行运算符

PHP 有一个执行运算符 **反引号 (``)**。PHP 将反引号中的内容作为 shell 命令执行。执行运算符和 **shell_exec()** 产生相同的结果。

运算符名称示例说明
``反引号echo `dir`;执行 shell 命令并返回结果。
这里,它将显示当前文件夹中可用的目录。
 

示例

立即执行

输出

script.php

注意:请注意,反引号 (``) 不是单引号。

将此代码保存为 list.php(或任何其他文件名)扩展名,保存在 XAMPP htdocs 文件中,该文件位于您的系统中。在 XAMPP 中启动 Apache 服务器,打开浏览器并输入 https:///list.php 以访问所有 .php 文件。您也可以在 CLI 中运行此代码。


错误控制运算符

PHP 有一个错误控制运算符,即 **at (@) 符号**。每当将其与表达式一起使用时,该表达式可能生成的任何错误消息都将被忽略。

运算符名称示例说明
@at@file ('non_existent_file')故意的文件错误
 

示例

立即执行

输出

Warning: fopen(nosuchfile.txt): Failed to open stream: No such file or directory in /tmp/yvAKbq8hXk/main.php on line 2
Hello World

在 fopen() 表达式中包含 @ 符号会隐藏错误消息,并且该语句也会被忽略。

示例

立即执行

输出

Hello World

PHP 运算符优先级

让我们看看 PHP 运算符的优先级及其结合性。

运算符附加信息结合性
clone newclone 和 new非结合性
[array()
**算术
++ -- ~ (int) (float) (string) (array) (object) (bool) @递增/递减和类型
instanceof类型非结合性
!逻辑(否定)
* / %算术
+ - .算术和字符串连接
<< >>位(移位)
< <= > >=比较非结合性
== != === !== <>比较非结合性
&按位与
^按位异或
|按位或
&&逻辑与
||逻辑或
?:三元
= += -= *= **= /= .= %= &= |= ^= <<= >>= =>赋值
并且逻辑
xor逻辑
逻辑
,多用(逗号)
 

示例

立即执行

输出

Result: 51

说明

*(乘法)和 /(除法)具有相同的优先级,它们从左到右计算

16 * 8 = 128,然后 128 / 4 = 32。 %(模)与乘法和除法具有相同的优先级:9 % 4 = 1

现在,将执行加法和减法部分:20 + 32 = 52,然后 52 - 1 = 51。


下一主题PHP 注释