本文转发来自:自学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. Spring系列.Resource接口

    接口简介 JDK中提供了java.net.URL这个类来用于获取不同种类的资源(根据不同前缀的url可以获取不同种类的资源).但是URL这个类没有获取classpath和ServletContext下 ...

  2. 05_MySQL什么是sql语句

    什么是SQL语言 SQL语言的分类 SQL语言的注意事项 SQL语句的注释 数据的创建.查看及删除 实操: 创建数据表 实操: 数据表的其他操作 查看数据库的数据表 查看表结构: 查看建表语句:

  3. JVM Attach实现原理剖析

    本文转载自JVM Attach实现原理剖析 前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清 ...

  4. CentOS部署TOMCAT8

    官网下载地址:https://tomcat.apache.org/download-80.cgi 版本:TOMCAT 8 -- Core--tar.gz 首先需要将文件传输到CentOS的/usr/s ...

  5. windows server2012 搭建FTP服务器过程

    搭建过程链接地址:https://blog.csdn.net/smalllu161226/article/details/53887751 1.打开windows server2012R2 服务器管理 ...

  6. MYSQL bin_log 开启及数据恢复

    参考博客: A:https://www.jianshu.com/p/55b0d52edca2 B:https://www.cnblogs.com/martinzhang/p/3454358.html ...

  7. COM技术中的VARIANT and VARIANTARG

    VARIANT and VARIANTARG Use VARIANTARG to describe arguments passed within DISPPARAMS, and VARIANT to ...

  8. 第49天学习打卡(CSS 层次选择器 结构伪类选择器 属性选择器 美化网页元素 盒子模型)

    推荐书籍:码出高效: Java 开发手册 2.2 层次选择器 idea里代码规范是按:ctrl +alt+L快捷键 注释快捷键:ctrl+/ 1.后代选择器:在某个元素的后面 祖爷爷 爷爷 爸爸 你 ...

  9. 【转】理解Serverless

    理解Serverless No silver bullet. - The Mythical Man-Month 许多年前,我们开发的软件还是C/S(客户端/服务器)和MVC(模型-试图-控制器)的形式 ...

  10. 剑指 Offer 25. 合并两个排序的链表

    剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...