本文转发来自:自学PHP笔记(五) PHP运算符

首先我们需要了解运算符是什么,运算符是指的对变量、常量或者数据进行计算的一个符号,比如数学中学到的加减乘除等用来运算的代表符号,PHP中的运算符也是这样的,它可以通过一个或者多个值产生一个新的值,这就是运算符的作用,PHP中把运算符分为:算数运算符、赋值运算符、字符串运算符、位运算符、比较运算符、逻辑运算符、错误控制运算符和其他运算符。下面将对一系列运算符进行说明

1.算数运算符

算数运算符也就是我们数学公式中学到的四则运算符,也就是加减乘除,算数运算符主要用来数学计算

算数运算符 说明
- 减法,在某些特殊场合会用于取反,比如数值的负值
+ 加法
* 乘法
/ 除法
% 取余,也就是获取除法中的余数

示例

<?php
$a = 100;
$b = 200;
echo $a * $b;
echo $b / $a;
?>

运算结果分别为:200002

2.赋值运算符

基本赋值运算符只有一个就是用=表示,这个赋值运算符就是把右边的表达式赋给左边的运算符,也就是将左右两边的表达式相等,写法也就是常用变量赋值的方法

示例

<?php
$a = 100;
$b = $a + 100;
echo $a;
echo $b;
?>

输出结果分别为:100200,可以看出$b变量被赋值变量a加上100,最后变量b的值为200

赋值运算符除了基本的赋值运算符外,还有用于二元算数、数组集合和字符串运算的组合运算符,这里解释下什么是二元运算符:由两个元素形成第三个元素的一种规则,例如数的加法及乘法;更一般地,由两个集合形成第三个集合的产生方法或构成规则称为二次运算。这个是官方说法,其实就可以理解为两个或者多个表达式用运算符生成另外一个表达式,这就二次运算。

组合运算符 说明 示例
.= 先连接后赋值 $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

示例

<?php
$a = 100;
$b = 200;
$a += $b;
echo $a;
?>

输出结果为:300

3. 字符串运算符

字符串运算符一开始我在想字符串还能运算?难不成还能A+B=C啊,后来通过一步步了解发现并不是那么回事,字符串的运算符就是将多个不同的字符表达式连接到一起,也就是将两个值进行合并。

字符串运算符只有两个,一个是.连接运算符,也就是将左右两边的字符串合表达式并为一个字符串表达式。另外一个就是连接赋值运算符,这个类似于组合运算符符中的先连接后赋值,使用.=进行表示

示例

<?php
$a = "hello";
$b = " word";
echo $a . $b;
$a .= $b;
echo $a;
?>

输出结果是一致的,输出结果为hello word

4.位运算符

这个我也是没搞太明白,有知道的大神可以给几个提示或者说明。下面我把PHP的位运算符做了一个列表:

位运算符 说明
& 按位与(And)
| 按位或(Or)
^ 按位异或(Xor)
~ 按位非(Not)
<< 左移
>> 右移

就这些啦,希望大家可以补充下此栏,私聊发我,我会补充到这里,提前谢谢大家啦

5.比较运算符

这个比较运算符理解比较简单,就是将多个表达式进行对比,返回结果位布尔值,如果比较结果为真则返回true,如果比较结果为假则返回false,这个运算符大部分会用在流程控制中,比较表达式。

比较运算符 说明
== 判断是否相等,注意这个不会判断数据类型
=== 判断是否相等,注意数据类型不同也会返回false
!= 不等于
<> 不等于
!== 非全等,注意会判读数据类型的
< 小于
> 大于
<= 小于等于
>= 大于等于
<=> 组合比较,当左侧值大于右侧值会返回大于0的结果,反之则返回小于0的结果
?? NULL合并操作符,从左往右第一个存在且不为NULL的操作数,如果没有定义且不为NULL则返回NULL

注意】在整数和字符串进行比较时,字符串会被转换成整数进行比较,比较字符串时,则作为整数进行比较。

示例

<?php
var_dump(1 == "a");
var_dump(1==="a");
var_dump(1!=="a");
?>

输出结果为:第一个输出结果为bool(false),第二个输出结果为bool(false),第三个输出结果为bool(true)

6.逻辑运算符

这个逻辑运算符用来组合逻辑运算符的结果,每个编程语言都离不开的哦,多数用来做判断,多于流程控制一起使用

逻辑运算符 说明
and 逻辑与,多个表达式都为真才会返回true
&& 逻辑与,与and一致
or 逻辑或,多个表达式一个为真就会被认为是真的
|| 逻辑或,与or一致
xor 逻辑异或,如果一个表达式为真另一个为假,则会返回true
逻辑非(取反),如果表达式为真,则返回false

示例】判断变量a和b是否都是1

<?php
$a = 1;
$b = 2;
if ($a and $b == 1){
echo "两个变量都是1哦";
}else{
echo "有一个变量不是1哦";
}
?>

输出结果为:有一个变量不是1哦

7.错误控制运算符

这个错误控制运算符就是为了不在前端输出错误信息或者是为了武略某些错误而设置的运算符,错误运算符时使用@表示,只需要在表达式前面加上错误控制运算符即可,如果你激活了track_errors特性,则表达式的错误信息都会保存至$php_errormsg变量中。

示例

<?php
$a =1 / 0;
?>

执行上面代码会产生一个异常报错,错误信息会在浏览器中展示,避免这种错误信息展示在浏览器当中你就可以使用错误控制运算符

<?php
$a = @(1 / 0);
?>

执行上面代码会发现之前在浏览器当中显示的错误信息不见了

注意】错误控制运算符只对表达式有效,如果能从某处获取到值,就能在他的前面加上错误控制运算符,可以把他放在变量、函数、incloud()调用、常量等之前,但是要避免把他放在函数或类定义之前,也不能用在条件结构前

8.其他运算符

1. 三元运算符

三元运算符说白了就是if-else,也是用来判断不同的表达式的,唯一不同的就是全写在一行里面,不需要分开写到多行,但是我还是建议大家使用if-else结构语句。

语法

(expr1)?(expr2):(expr3)

解释:当expr1表达式为真时,则执行expr2表达式,并返回它的值,否则就会执行expr3表达式,并返回其值。

上面运算也可以直接省略expr2表达式,直接执行expr3。

(expr1) ?: (expr3)

解释:当expr1表达式为真时,直接返回expr1值,否则返回expr3的值。

示例】这个示例用来判断这个相邻两个变量的值。

<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;
echo $a<$b?'A':$b<$c?'B':$c<$d?'C':'D';
?>

执行上面代码返回值C

哎最烦解释这种一行写下来的条件结构,看起来很复杂,稍不留神就理解不了,下面我拆开给大家看应该就觉得比较简单了,如果还是觉得很难理解的话,我建议大家直接跳过这一步,直接看后面的if-else

#第一步判断$a和$b,返回结果"A"
echo $a < $b ? 'A' : $b;
#第二步判断$b和$c,返回结果"B"
echo $b < $c ? 'B' : $d;
#第三步判断$c和$d,返回结果"C"
ehoc $c < $d ? 'C' : 'D';

最后给大家上个流程图吧,不好意思在博客园平台流程图没办法显示,建议大家前往csdn阅读,自学PHP笔记(五) PHP运算符

flowchat
st=>start: 开始
e=>end: 结束
op1=>condition: $b < $c
op2=>operation: A
cond=>condition: $a < $b
op3=>condition: $c < $d
op4=>operation: B
op5=>operation: C
op6=>operation: D
st->cond->op1->op3->op5
cond(yes)->op1
cond(no)->op2
op1(yes)->op3
op1(no)->op4
op3(yes)->op5
op3(no)->op6

这样应该看起来就简单很多了,这样就方便判断了,如果还是不行,那就跳过吧,不重要

2. 递增和递减运算符

这个递增和递减说起来就比较简单了,比起上面的三元运算简单多了,递增就是每执行一次都会加1,递减就是每执行一次都会减1,这个运算符有下面几种表示方法。

运算符 说明
++$a 返回$a+1的值
$a++ 返回$a的值,然后再加1
--$a 返回$a-1的值
$a-- 返回$a的值,然后再减1

注意这里的减号是两个不是一个

这种递增递减的运算符多数用在循环结构当中。

递增示例1

<?php
for ($i = 0; $i++ < 10;){
echo $i." ";
}
?>

输出结果为:1 2 3 4 5 6 7 8 9 10

递增示例2

<?php
for ($i = 0; ++$i < 10;){
echo $i." ";
}
?>

输出结果为:1 2 3 4 5 6 7 8 9

递减示例1

<?php
for ($i = 10; $i-- > 1;){
echo $i." ";
}
?>

输出结果为:9 8 7 6 5 4 3 2 1

递减示例2

<?php
for ($i = 10; --$i > 1;){
echo $i." ";
}
?>

输出结果为:9 8 7 6 5 4 3 2

9.运算符的优先级和结合方向

运算符的优先级其实就是指的执行顺序,哪一个优先执行哪一个后执行,在数学四则运算中,先算乘除后算加减,同样在PHP中肯定也是有这种执行顺序的。

在PHP当中运算符所遵循的运算顺序为:优先级高的操作先执行,优先级低的操作后执行,同一优先级按照从左向右顺序依次执行。

在PHP中也有小括号的先运算的说法,有小括号先执行小括号里面的表达式,然后再执行其他的。

自学PHP笔记(五) PHP运算符的更多相关文章

  1. C++基础 学习笔记五:重载之运算符重载

    C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...

  2. 孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务

    孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第五天.今天的感觉是,mongoDB数 ...

  3. 孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库

    孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第四天.今天的感觉是,mongoDB数据 ...

  4. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

  5. 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

    孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...

  6. 孤荷凌寒自学python第五十五天初识MongoDb数据库

    孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...

  7. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  8. 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录

     孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  9. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

随机推荐

  1. 云原生系列6 基于springcloud架构风格的本地debug实现

    debug是程序员在日常开发中最常使用的操作, 那么,你是如何快速在微服务架构风格下快速debug后端服务呢? 开发现状 开发的理想状态 本地调测的使用步骤 登录智能网关 如果集成开发环境是在本地局域 ...

  2. Vue为何采用异步渲染

    Vue为何采用异步渲染 Vue在更新DOM时是异步执行的,只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更,如果同一个watcher被多次触发,只会被推入到队列中一次 ...

  3. CSS布局,div居中,文字居中

    .main { width: 100%; margin: 0 auto; .banner { img { width: 100%; } } .article { margin-bottom: 100p ...

  4. Debian 基本使用进阶

    系统安装好了我们,迫不及待的想要在Linux系统中肆意翱翔.如果是刚刚接触Linux的系统的话,可能一时间还无法适应Linux的系统环境.对于使用Debian来做服务器的选择,最好的练习方式的就是使用 ...

  5. SpringCloud之服务注册中心

    1.Eureka 1.1RestTemplate 它提供了多种访问远程http服务的方法,是一种简单便捷的访问restful服务模板类,是spring提供的用于访问Rest服务的客户端模板工具集. 1 ...

  6. Oracle check TBS usage

    select d.tablespace_name, space||'M' "SUM_SPACE(M")", blocks "SUM_BLOCKS", ...

  7. Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    Error: javax.servlet.ServletException: java.sql.SQLSyntaxErrorException: Expression #4 of SELECT lis ...

  8. 探索 .NET Core 依赖注入的 IServiceProvider

    在上一篇文章中,我们学习了Microsoft.Extensions.DependencyInjection中的IServiceCollection,包括服务注册转换为ServiceDescriptor ...

  9. Azure Functions(三)集成 Azure Queue Storage 存储消息

    一,引言 接着上一篇文章继续介绍 Azure Functions,今天我们将尝试绑定 Queue Storage,将消息存储到 Queue 中,并且学会适用于 Azure Functions 的 Az ...

  10. salesforce零基础学习(一百零一)如何了解你的代码得运行上下文

    本篇参考:https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_enum_System ...