PHP8的运算符-PHP8知识详解

运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。

PHP8的运算符有很多,按类型分有一元运算符二元运算符三元运算符

一元运算符只对一个表达式执行操作,只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。

二元运算符用于两个操作数之间,可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。

三元运算符用在三个操作数之间,可接受三个值,列如唯一的三元运算符 ? :。

本节主要的知识点有:运算符优先级、算术运算符、赋值运算符、位运算符比较运算符错误控制运算符执行运算符递增/递减运算符逻辑运算符字符串运算符、数组运算符、类型运算符、三元运算符。

一、运算符优先级

PHP8 的运算符完整列表见下面运算符优先级。解释了运算符优先级和结合方向,这控制着在表达式包含有若干个不同运算符时究竟怎样对其求值。

运算符优先级指定了两个表达式绑定得有多"紧密"。例如,表达式 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)。

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

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

二、算术运算符

1、+a , 标识运算, 根据情况将 a 转化为 int 或 float。

2、-a ,取反运算, a 的负值。

3、a + b, 加法运算, a 和 b 的和。

4、a - b, 减法运算, a 和 b 的差。

5、a \* b, 乘法运算, a 和 b 的积。

6、a / b, 除法运算, a 除以 b 的商。

7、a % b, 取模运算, a 除以 b 的余数。

8、a \*\* b, 求幂运算, a 的 b次方的值。

示例:

复制代码
<?php
echo (5 % 3);    // 打印 2
echo "<br>";     //换行显示
echo (5 % -3);   // 打印 2
echo "<br>";     //换行显示
echo (-5 % 3);   // 打印 -2
echo "<br>";     //换行显示
echo (-5 % -3);  // 打印 -2
?>

运行结果如下:

复制代码
2
2
-2
-2

三、赋值运算符

赋值运算符的作用是把一定的数值加载给特定的变量。基本的赋值运算符是"="。即把右边表达式的值赋给左边的运算数(变量)。

3.1、算术赋值运算符

1、a += b, 等同于 a = a + $b ,加法运算符

2、a -= b, 等同于 a = a - $b ,减法运算符

3、a \*= b, 等同于 a = a * $b ,乘法运算符

4、a /= b, 等同于 a = a / $b ,除法运算符

5、a %= b,等同于 a = a % $b, 取模运算符

6、a \*\*= b ,等同于 a = a ** $b ,指数运算符

3.2、位赋值运算符

1、a \&= b, 等同于a = a & $b, 按位与

2、a \|= b, 等同于a = a | $b ,按位或

3、a \^= b ,等同于a = a ^ $b ,按位异或

4、a \<\<= b,等同于 a = a << $b, 左移

5、a \>\>= b ,等同于a = a >> $b, 右移

3.3、其他赋值运算符

1、a .= b, 等同于a = a . $b ,字符串拼接

2、a ??= b, 等同于a = a ?? $b ,NULL 合并

四、位运算符

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

1、a \& b ,And(按位与), 将把 a 和 b 中都为 1 的位设为 1。

2、a \| b ,Or(按位或), 将把 a 和 b 中任何一个为 1 的位设为 1。

3、a \^ b ,Xor(按位异或), 将把 a 和 b 中一个为 1 另一个为 0 的位设为 1。

4、~ a Not,(按位取反), 将 a 中为 0 的位设为 1,反之亦然。

5、a \<\< b, Shift left(左移), 将 a 中的位向左移动 b 次(每一次移动都表示"乘以 2")。

6、a \>\> b, Shift right(右移), 将 a 中的位向右移动 b 次(每一次移动都表示"除以 2")。

要用括号确保想要的优先级。例如 a \& b == true 先进行比较再进行按位与;而 (a \& b) == true 则先进行按位与再进行比较。

位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

如果 &、 | 和 ^ 运算符的左右两个操作对象都是字符串,将对会组成字符串的字符 ASCII 值执行操作,结果也是一个字符串。除此之外,两个操作对象都将 转换为整数 ,结果也将会是整数。

如果 ~ 运算符的操作对象是字符串,则将对组成字符串的字符 ASCII 值进行操作, 结果将会是字符串,否则操作对象和结构都会是整数。

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

五、比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。

1、a == b ,等于, true,如果类型转换后 a 等于 b。

2、a === b, 全等于, true,如果 a 等于 b,并且它们的类型也相同。

3、a != b ,不等, true,如果类型转换后 a 不等于 b。

4、a \<\> b ,不等 ,true,如果类型转换后 a 不等于 b。

5、a !== b ,不全等 ,true,如果 a 不等于 b,或者它们的类型不同。

6,、a \< b, 小于, true,如果 a 严格小于 b。

7、a \> b, 大于, true,如果 a 严格大于 b。

8、a \<= b, 小于等于, true,如果 a 小于或者等于 b。

9,、a \>= b, 大于等于, true,如果 a 大于或者等于 b。

10、a \<=\> b, 太空船运算符(组合比较符), 当a小于、等于、大于 b时 分别返回一个小于、等于、大于0的 int 值。

六、错误控制运算符

PHP 支持一个错误控制运算符"@"。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误诊断都被抑制。

七、执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符"`"的效果与函数 shell_exec() 相同。

复制代码
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

注意:

1、关闭了 shell_exec() 时反引号运算符是无效的。

2、与其它某些语言不同,反引号不能在双引号字符串中使用。

八、递增/递减运算符

PHP 支持 C 风格的前/后递增与递减运算符。

1、++a, 前加: a 的值加一,然后返回 $a。

2、a++ ,后加: 返回 a,然后将 $a 的值加一。

3、--a ,前减 :a 的值减一, 然后返回 $a。

4、a-- ,后减 :返回 a,然后将 $a 的值减一。

九、逻辑运算符

一个编程语言最重要的功能之一就是进行逻辑判断和运算,比如逻辑与、逻辑或、逻辑非、逻辑异或。

1、a and b ,And(逻辑与): true,如果 a 和 b 都为 true。

2、a or b, Or(逻辑或): true,如果 a 或 b 任一为 true。

3、a xor b, Xor(逻辑异或): true,如果 a 或 b 任一为 true,但不同时是。

4、! a, Not(逻辑非): true,如果 a 不为 true。

5、a \&\& b ,And(逻辑与): true,如果 a 和 b 都为 true。

6、a \|\| b, Or(逻辑或): true,如果 a 或 b 任一为 true。

十、字符串运算符

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

复制代码
<?php
$a = "你好";      //给变量$a赋值
$b = $a . "PHP8"; //现在 $b 包含 "你好 PHP8"
echo $b;          //输出变量$b
echo "<br>";      //换行显示
$a = "你好";      //给变量$a赋值
$a .= "PHP8";     //现在 $a 包含 "你好 PHP8"
echo $a;          //不打引号输出变量$a
echo "<br>";      //换行显示
echo '$a';        //打单引号输出变量$a
echo "<br>";      //换行显示
echo "$a";        //打双引号输出变量$a
?>

运行结果如下:

复制代码
你好PHP8
你好PHP8
$a
你好PHP8

温馨提醒,对于字符串型数据输出,可以使用单引号,也可以使用双引号,也可以不使用引号。

使用单引号和双引号输出同一个变量,结果是不同的。单引号输出的是字符串,双引号和不带引号输出的是变量的值。

十一、数组运算符

1、a + b ,联合: a 和 b 的联合。

2、a == b ,相等 :如果 a 和 b 具有相同的键/值对则为 true。

3、a === b ,全等: 如果 a 和 b 具有相同的键/值对并且顺序和类型都相同则为 true。

4、a != b, 不等 :如果 a 不等于 b 则为 true。

5、a \<\> b, 不等 :如果 a 不等于 b 则为 true。

6、a !== b, 不全等: 如果 a 不全等于 b 则为 true。

  • 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

数组中的单元如果具有相同的键名和值则比较时相等。

十二、类型运算符

使用instanceof 来进行实例引用。

1、确定一个 PHP 变量是否属于某一类 class 的实例:

复制代码
<?php
class MyClass
{
}

class NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

以上示例会输出:

复制代码
bool(true)
bool(false)

2、确定一个变量是不是继承自某一父类的子类的实例:

复制代码
<?php
class ParentClass
{
}

class MyClass extends ParentClass
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>

以上示例会输出:

复制代码
bool(true)
bool(true)

3、检查一个对象是否不是某个类的实例

复制代码
<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

以上示例会输出:

复制代码
bool(true)

4、用于确定一个变量是不是实现了某个接口的对象的实例

复制代码
<?php
interface MyInterface
{
}

class MyClass implements MyInterface
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

以上示例会输出:

复制代码
bool(true)
bool(true)

十三、三元运算符

三元运算符是一种在编程中常用的条件语句,也被称为三目运算符或条件运算符。它通常用于简化条件判断和赋值操作。

在PHP8中,三元运算符"?:"被称为"三元运算符"或"三目运算符",其语法格式为:

条件表达式 ? 表达式1 : 表达式2

其中,条件表达式为一个布尔表达式,如果该表达式的值为真,则返回表达式1的值;如果该表达式的值为假,则返回表达式2的值。

例如,以下是一个使用三元运算符的示例:

复制代码
<?php
$a = "99>88";      
$b = $a ?: "100不大于99"; 
$c = $a ? "100大于99" : "100不大于99"; 
echo $b;  
echo "<br>";  
echo $c;          
?>

运行结果如下:

复制代码
99>88
100大于99

到此为止,本文主要讲解的运算符优先级、算术运算符、赋值运算符、位运算符、比较运算符、错误控制运算符、执行运算符、递增/递减运算符、逻辑运算符、字符串运算符、数组运算符、类型运算符、三元运算符就讲解完毕了,大家慢慢参考学习。

space

相关推荐
林深时见鹿7498 小时前
使用k8s k3s kuboard 部署 php hyperf 框架
php
长城20248 小时前
从词源和输出生成等角度详细解析PHP中常用文件操作类函数
php·文件·函数·文件操作函数
长城20248 小时前
PHP如何使用JpGraph生成3D饼形图?
开发语言·php·jpgraph·3d饼形图
熬夜苦读学习15 小时前
Reactor 反应堆模式
运维·服务器·网络·网络协议·http·智能路由器·php
小森林815 小时前
分享一次Guzzlehttp上传批量图片优化的经历
后端·php
THMAIL16 小时前
大模型0基础开发入门与实践:第11章 进阶:LangChain与外部工具调用
开发语言·langchain·php
分享点2 天前
Laravel 使用阿里云OSS S3 协议文件上传
阿里云·php·laravel
苏琢玉2 天前
订单号老是撞车?我写了个通用 PHP ID 生成器
php·composer
BingoGo2 天前
PHP 测试框架 Pest v4 正式发布 革命性的浏览器测试体验
后端·php
搬码临时工2 天前
通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
服务器·tcp/ip·php