PHP8的运算符-PHP8知识详解

news2025/1/17 15:54:06

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

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

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

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

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

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

Image

一、运算符优先级

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)。

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

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

Image

二、算术运算符

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java类与对象详解(2)

this引用 为什么要有this引用 先来看一个日期类的例子&#xff1a; ​ public class Date {public int year;public int month;public int day;//设置日期方法public void setDay(int y, int m, int d){//这里隐藏了一个Date this参数year y;month m;day d;}public void …

广州银行信用卡中心:强化数字引擎安全,实现业务稳步增长

广州银行信用卡中心是全国城商行中仅有的两家信用卡专营机构之一&#xff0c;拥有从金融产品研发至销售及后期风险控制、客户服务完整业务链条&#xff0c;曾获“2016年度最佳创新信用卡银行”。 数字引擎驱动业务增长 安全左移降低开发风险 近年来&#xff0c;广州银行信用卡…

fetch的使用和实现跨域及与axios的区别

一、作用 和axios作用类似&#xff0c;用于请求接口。它是XMLHttpRequest的一种替代方案。 二、安装 因为fetch有兼容性问题&#xff0c;所以我们安装升级版 whatwg-fetch cnpm i whatwg-fetch -S 三、使用 四、fetch和axios的区别 1&#xff0c;fetch返回的是一个未处理…

华为OD机试真题 Java 实现【TLV格式】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

聚焦 TimescaleDB VS TDengine 性能对比报告,IoT 场景下全面分析写入与查询

基于第三方基准性能测试平台 TSBS&#xff08;Time Series Benchmark Suite&#xff09; 标准数据集&#xff0c;TDengine 团队在 TSBS 的 IoT 场景中&#xff0c;预设了五种规模的卡车车队基础数据集&#xff0c;在相同的 AWS 云环境下对时序数据库&#xff08;Time Series Da…

【NLP概念源和流】 01-稀疏文档表示(第 1/20 部分)

一、介绍 自然语言处理(NLP)是计算方法的应用,不仅可以从文本中提取信息,还可以在其上对不同的应用程序进行建模。所有基于语言的文本都有系统的结构或规则,通常被称为形态学,例如“跳跃”的过去时总是“跳跃”。对于人类来说,这种形态学的理解是显而易见的。 在这篇介…

【FAQ】在Linux中使用curl访问EasyCVR,返回报错Unauthorized的原因排查

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比如&#xff1a;视…

【C++刷题】经典简单题第一辑

数字在升序数组中出现的次数 class Solution { public:int GetNumberOfK(vector<int>& nums, int k){size_t left 0;size_t right nums.size();size_t mid1 -1;/** 用二分法的思想寻找 k 的边界*/// 寻找 k 的左边界下标while(left < right){mid1 left (ri…

yolov3-spp 训练结果分析:网络结果可解释性、漏检误检分析

1. valid漏检误检分析 ①为了探查第二层反向找出来的目标特征在最后一层detector上的意义&#xff01;——为什么最后依然可以框出来目标&#xff0c;且mAP还不错的&#xff1f; ②如何进一步提升和改进这个数据的效果&#xff1f;可以有哪些优化数据和改进的地方&#xff1f;让…

5分钟学会你创建搜狗百科

搜狗百科属于微信生态里的平台&#xff0c;搜狗百科不仅在搜狗搜索中展示&#xff0c;且可以在微信搜索中展示。那么搜狗百科该怎么创建呢&#xff1f;下面小马识途营销顾问分享下搜狗百科词条创建的流程。 1、要创建搜狗百科词条&#xff0c;首先需要在搜狗百科官网上注册一个…

【前端入门之旅】HTML中元素和标签有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 标签&#xff08;Tag&#xff09;⭐元素&#xff08;Element&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

实例028 为触摸屏程序添加虚拟键盘

实例说明 由于触摸屏没有键盘&#xff0c;只能利用屏幕操作。如果要输入数据或查找数据&#xff0c;需要制作一个虚拟键盘&#xff0c;以方便用户输入。本例介绍如何实现虚拟键盘的程序设计。运行本例&#xff0c;效果如图1.28所示。 技术要点 本例中用到了Lable控件的透明属…

【HarmonyOS】性能优化之低代码开发加载多张轮播图

【关键字】 HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载 写在前面 目前使用DevEco Studio的低代码工具开发元服务时&#xff0c;通过实际测试发现&#xff0c;Swiper组件加载多张轮播图时加载显示耗时较长&#xff08;实际测试网络状态一般的情况下显示耗时达到8…

好的CRM有哪些优点及功能?

市面上有很多CRM品牌&#xff0c;很多初次选型的企业没有深入的了解&#xff0c;不知道如何选择适合自己的CRM软件。小编认为&#xff0c;CRM选型无非就是靠谱和适合。这里有一款值得信赖的CRM软件推荐——Zoho CRM。 一、什么是Zoho CRM&#xff1f; Zoho CRM是一款SaaS云端…

只需十四步,从零开始掌握Python机器学习

推荐阅读&#xff08;点击标题查看&#xff09; 1、Python 数据挖掘与机器学习实践技术应用 2、R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展 3、最新基于MATLAB 2023a的机器学习、深度学习 4、【八天】“全面助力AI科研、教学与实践技能”夏令营…

计算机视觉与图形学-神经渲染专题-第一个基于NeRF的自动驾驶仿真平台

如今&#xff0c;自动驾驶汽车可以在普通情况下平稳行驶&#xff0c;人们普遍认识到&#xff0c;真实的传感器模拟将在通过模拟解决剩余的极端情况方面发挥关键作用。为此&#xff0c;我们提出了一种基于神经辐射场&#xff08;NeRF&#xff09;的自动驾驶模拟器。与现有作品相…

无人机自动返航的关键技术有哪些

无人机的广泛应用使得无人机自动返航技术变得至关重要。在各种应对意外情况的背景下&#xff0c;无人机自动返航技术的发展对确保无人机的安全&#xff0c;以及提高其应用范围具有重要意义。接下来&#xff0c;便为大家详细介绍无人机自动返航所运用到的关键技术。 一、定位与导…

Mysql on duplicate key update用法及优缺点

在实际应用中&#xff0c;经常碰到导入数据的功能&#xff0c;当导入的数据不存在时则进行添加&#xff0c;有修改时则进行更新&#xff0c; 在刚碰到的时候&#xff0c;一般思路是将其实现分为两块&#xff0c;分别是判断增加&#xff0c;判断更新&#xff0c;后来发现在mysql…

服务器的shell脚本

shell脚本语句可以执行linux的操作语句。 linux相当于网页&#xff0c;shell相当于java。可以解释编写执行逻辑。 shell的开头以&#xff1a;#!bin/sh 定义解析方式&#xff0c;不同的linuxe内核解释方式不同。大多数内核支持sh&#xff08;bash&#xff09;方式。 执行sh文件可…

C# Onnx Paddle模型 OCR识别

RapidOCR https://github.com/RapidAI/RapidOCR/blob/main/docs/README_zh.md 效果 项目 Demo&#xff08;带模型&#xff09;下载