【PHP基础】运算符

本文详细介绍了PHP中的各种运算符,包括算术、赋值、比较、递增/递减、逻辑、字符串和数组运算符。还探讨了运算符的优先级和结合性,以及在实际编程中的应用。了解这些内容对于编写高效、准确的PHP代码至关重要。
摘要由CSDN通过智能技术生成

1 运算符简介

  1. 作用:运算符是可以通过给出的一或多个值来产生另一个值的东西。
  2. 运算符可按照其能接受几个值来分组:
    1. 一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。
    2. 二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。
    3. 唯一的三元运算符 ? :,可接受三个值;通常就简单称之为“三元运算符”(尽管称之为条件运算符可能更合适)。
  3. 运算符按功能分类:
    1. 算术运算符
    2. 赋值运算符
    3. 位运算符
    4. 比较运算符
    5. 错误控制运算符
    6. 执行运算符
    7. 递增/递减运算符
    8. 逻辑运算符
    9. 字符串运算符
    10. 数组运算符类型运算符

2 常见的运算符类型

2.1 算术运算符

例子名称结果
+$a标识根据情况将 $a 转化为 int 或 float。
-$a取反$a 的负值。
$a + $b加法$a 和 $b 的和。
$a - $b减法$a 和 $b 的差。
$a * $b乘法$a 和 $b 的积。
$a / $b除法$a 除以 $b 的商。
$a % $b取模$a 除以 $b 的余数。
$a ** $b求幂$a 的 $b次方的值。
特殊说明:
  1. 除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。 整数除法可参考 intdiv()
  2. 取模运算符的操作数在运算之前都会转换成 int 。 浮点数取模可参考 fmod()
  3. 取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。

2.2 赋值运算符

  1. 最基础的赋值运算符是 “=”,另外还有引用赋值的用法,关于变量的直接赋值和引用赋值参考《PHP变量与常量使用方法》。
  2. 算术赋值运算符较为常用,说明如下表。位赋值运算符及其他赋值运算符用法参考《赋值运算符
例子等同于操作
$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取模
$a **= $b$a = $a ** $b指数

2.3 比较运算符

常见的比较运算符如下:

例子名称结果
$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的 int 值。
不同类型进行比较时,会按下表进行类型转换,建议自己手动强制转换保证结果可控。
运算数 1 类型运算数 2 类型结果
---
null 或 stringstring将 null 转换为 “”,进行数字或词汇比较
bool 或 null任何其它类型转换为 bool,false < true
objectobject内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明
string、resource、int、floatstring、resource、int、float将字符串和资源转换成数字,按普通数学比较
arrayarray具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较
object任何其它类型object 总是更大
array任何其它类型array 总是更大
比较运算符实例请参考文章《比较运算符》。

2.4 递增/递减运算符

例子名称效果
++$a前加$a 的值加一,然后返回 $a。
$a++后加返回 $a,然后将 $a 的值加一。
–$a前减$a 的值减一, 然后返回 $a。
$a–后减返回 $a,然后将 $a 的值减一。
特别注意的是:
  • 递增/递减运算符不影响布尔值。
  • 递减 null 值也没有效果,但是递增 null 的结果是 1。

更多实例请参考官方文章《递增/递减运算符

2.5 逻辑运算符

例子名称结果
$a and $bAnd(逻辑与)true,如果 $a 和 $b 都为 true。
$a or $bOr(逻辑或)true,如果 $a 或 $b 任一为 true。
$a xor $bXor(逻辑异或)true,如果 $a 或 $b 任一为 true,但不同时是。
! $aNot(逻辑非)true,如果 $a 不为 true。
$a && $bAnd(逻辑与)true,如果 $a 和 $b 都为 true。
$a || $bOr(逻辑或)true,如果 $a 或 $b 任一为 true。
特别注意的是:“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同(见下文运算符优先级)。

2.6 字符串运算符

有两个字符串(string)运算符。

  • 第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。
  • 第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。
<?php
$a = "Hello ";
$b = $a . "World!"; // 现在 $b 包含 "Hello World!"
$a = "Hello ";
$a .= "World!";     // 现在 $a 包含 "Hello World!"
?>

2.7 数组运算符

例子名称结果
$a + $b联合$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。
更多实例请参考文章《数组运算符

3 运算符的优先级

  1. 运算符的执行顺序按优先级和关联性来控制:
    1. 运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1+5*3的结果是16而不是18,是因为乘号(“*”)的优先级比加号(“+”)高。
    2. 如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-“是左联的,那么1-2-3就等同于(1-2)-3并且结果是-4.另外一方面,”="是右联的,所以$a=$b=$c等同于$a=($b=$c)。
  2. 没有结合的相同优先级的运算符不能连在一起使用,例如1<2>1在PHP是不合法的。但另外一方面表达式1<=1==1是合法的,因为==的优先级低于<=。
  3. 关联性仅对二(三)元操作符有意义。一元操作符是前缀或者后缀,所以不适用该概念。例如!!$a仅可分为!(!$a)。
  4. 括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。
  5. 下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
结合方向运算符附加信息
**算术运算符
不适用+ -
++ –
~
(int) (float) (string) (array) (object) (bool)
@
算术 (一元 + 和 -)
递增/递减
按位
类型转换
错误控制
不适用!逻辑运算符
* / %算术运算符
+、-、.算数 (二元 + 和 -),
array 和 string (. PHP 8.0.0 前可用)
<<、>>位运算符
.string (PHP 8.0.0 起可用)
<、<=、>、>=比较运算符
==、!=、===、!==、<>、<=>比较运算符
&位运算符 和 引用
^位运算符
||位运算符
&&逻辑运算符
||逻辑运算符
??null 合并运算符
无关联? :三元运算符 (PHP 8.0.0 之前左联)
=、+=、-=、*=、**=、/=、.=、%=、
&=、|=、^=、<<=、>>=、??=
赋值运算符
and逻辑运算符
xor逻辑运算符
or逻辑运算符

4 总结

  1. 理解运算符的优先级和关联系的意义;
  2. 掌握各运算符的作用及使用方式;
  3. 掌握查询运算符使用说明的方法。《PHP官方帮助手册

参考文献

  1. PHP官方帮助手册》一个较好的资源,方便工作时查询。
  2. 运算符优先级
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值