本文转发来自:自学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. 解决ROS及Fast-RTPS安装和使用中raw.githubusercontent.com无法连接的问题

    资料参考: https://blog.csdn.net/weixin_44692299/article/details/105869229

  2. JAVA 8 新特性实用总JAVA 8 新特性实用总结结

    JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 ...

  3. IdentityServer4之Authorization Code(授权码)相对更安全

    前言 接着授权模式聊,这次说说Authorization Code(授权码)模式,熟悉的微博接入.微信接入.QQ接入都是这种方式(这里说的是oauth2.0的授权码模式),从用户体验上来看,交互方式和 ...

  4. MySQL5.7.29 和 Navicat ===> windows窗口式按装和使用

    MySQL windows窗口式按装下载方法:官网: https://www.mysql.com/ ==> DOWNLOADS ==> MySQL Community (GPL) Down ...

  5. iOS中web与Js的交互

    问题 感觉到uni-app框架有pit,公司强推该框架的小哥识趣的闭嘴,考虑到全盘替换周期跟成本挺大,基于uni-app能打包成H5,采用webview+js的原生方式集成 基本结构:原生壳 + we ...

  6. 后端程序员之路 2、nginx、php

    nginx是由俄罗斯人开发的一种实现web服务器的工具,主要是为俄罗斯的第三大门户网站实现反向代理加速的服务器. Linux(CentOS)下,下载安装Nginx并配置 - jtlgb - 博客园ht ...

  7. 基于jQuery1.4.2轻量级的弹出窗口jQuery插件wBox 1.0

    Box特点 背景透明度可以根据实际情况进行调节 可以根据需要添加wBox标题 支持callback函数 支持html内容自定义 支持在wBox显示#ID的内容 支持Ajax页面内容 支持iFrame ...

  8. Python高级——多任务编程之线程

    转: Python高级--多任务编程之线程 文章目录 线程概念 1. 线程的介绍 2. 线程的概念 3. 线程的作用 多线程的使用 1. 导入线程模块 2. 线程类Thread参数说明 3. 启动线程 ...

  9. Elasticsearch 模块 - Shard Allocation 机制

    原文 1. 背景 shard allocation 意思是分片分配, 是一个将分片分配到节点的过程; 可能发生该操作的过程包括: 初始恢复(initial recovery) 副本分配(replica ...

  10. 漏洞复现-2.x rce-Thinkphp远程命令执行

                0x00实验环境 攻击机:win10 靶机:Ubuntu18 (docker搭建的vulhub靶场) 0x01影响版本 影响Thinkphp 2.x的版本 0x02实验目的 学 ...