博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.5PHP运算符
阅读量:3703 次
发布时间:2019-05-21

本文共 3664 字,大约阅读时间需要 12 分钟。

简单来讲,各种程序语言的运算符类似于数学知识中的运算符号。

按照可以操作几个数值来分类,可以分为三类:一元、二元、三元运算符。

①一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符);
②二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种;
③最后是唯一的三元运算符 ? :,可接受三个值。

按照功能来分类,可以分为:

算术运算符、赋值运算符、位运算符、比较运算符、错误控制运算符、执行运算符、递增/递减运算符、逻辑运算符、字符串运算符、数组运算符、类型运算符。

1.5.1 PHP 算数运算符

程序的算数运算符和基本数学知识一样。
eg:

运算符 示例 结果
+ $a + $b $a$b 的和。
- $a — $b $a$b 的差。
* $a * $b $a$b 的积。
/ $a / $b $a 除以 $b 的商。
% $a % $b $a 除以 $b 的余数。

注意事项:

①除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
②取模运算符(%)的操作数在运算之前都会转换成整数(除去小数部分)。
③取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
④两个数组相加时,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

eg:

1.5.2赋值运算符

基本的赋值运算符是“=”。它实际上意味着把右边表达式的值赋给左边的变量,并不是“等于”,php中等于是“”,“=”。
另外,一些简写的方式如下:

>= $b; $a = $a >> $b;

1.5.3位运算符

位运算符允许对整型数中指定的位进行求值和操作。
上面那句话是官方定义,按照个人理解,就是把运算的数,转换成二进制进行相应的计算。操作数在运算之前都会转换成整数(除去小数部分)。
位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

运算符 示例 结果
& $a & $b 将把 $a$b 中都为 1 的位设为 1。
\| $a\|$b 将把 $a$b 中任何一个为 1 的位设为 1。
^ $a ^ $b 将把 $a$b 中一个为 1 另一个为 0 的位设为 1。
~ ~ $a $a 中为 0 的位设为 1,反之亦然。
<< $a << $b $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
>> $a >> $b $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

在php中位运算符在编码中并不常用,以下只做“|”和“&”介绍

eg:

下面介绍“&&”、“||”和“&”、“|”的区别

逻辑运算符在编码过程中是必不可少的。“&&”与“||”在判断时,存在短路问题,"&"与“|”则不存在。
eg:

"; }else{
echo 2 ."
"; } echo $a ."
";//输出1 //这里程序不管$b结果如何,都会对$a++进行计算,再根据结果判断是否进入else if($b & $a++){
echo 3 ."
"; }else{
echo 4 ."
"; } echo $a ."
";//输出2

1.5.4比较运算符

对两个值进行比较的运算符。如下:

示例 名称 结果
$a==$b 等于 TRUE,如果类型转换后 $a 等于 $b。比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行,eg:var_dump(1 == '1a');//输出true
$a===$b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。=== 或 !== 进行比较时不进行类型转换,因为此时类型和数值都要比对。
$a!=$b 不等 TRUE, 如果类型转换后 $a 不等于 $b
$a<>$b 不等 TRUE,如果类型转换后 $a 不等于 $b
$a!==$b 不全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。
$a<$b 小于 TRUE,如果 $a 严格小于 $b
$a>$b 大于 TRUE,如果 $a 严格大于 $b
$a<=$b 小于等于 TRUE,如果 $a 小于或者等于 $b
$a>=$b 大于等于 TRUE,如果 $a 大于或者等于 $b
$a ?? $b ?? $c NULL 合并操作符 从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。
$a <=> $b 太空船运算符(组合比较符) TRUE,如果 $a 大于或者等于 $b

多种类型比较转换参考如下:

运算数 1 类型 运算数 2 类型 结果
null 或 string string 将 NULL 转换为 “”,进行数字或词汇比较
bool 或 null 任何其它类型 转换为 bool,FALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能比较,具体参考http://php.net/manual/zh/language.oop5.object-comparison.php
string,resource 或 number string,resource 或 number 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,此时总是返回false,否则挨个值比较
object 任何其它类型 object 总是更大
array 任何其它类型 除了object,array总是更大

1.5.5递增/递减运算符

注意:
1、 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
2、字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。

例子 效果
++$a $a 的值加一,然后返回 $a
--$a $a 的值减一, 然后返回 $a
$a++ 先返回 $a,然后将 $a 的值加一。
$a-- 先返回 $a,然后将 $a 的值减一。

eg:

'; }//输出Z9 AA0 AA1 AA2 AA3 AA4 AA5 AA6 AA7 AA8 AA9 AB0 AB1 AB2 AB3 AB4 AB5 AB6 AB7 AB8 for ($n=0; $n<20; $n++) {
echo $e++ . '
'; }//输出Z8 Z9 AA0 AA1 AA2 AA3 AA4 AA5 AA6 AA7 AA8 AA9 AB0 AB1 AB2 AB3 AB4 AB5 AB6 AB7

1.5.6逻辑运算符

运算符 描述 说明 示例
and&& 逻辑与 左右两边都为TRUE时,返回true,否则返回false $a && $b
$a and $b
or\|\| 逻辑或 两边操作数都为false时返回false否则返回true $a \|\| $b
$a or $b
!not 逻辑非 取反 not $a
!$a
xor 逻辑异或 当两边操作数结果不同时,返回true,否则返回false $a xor $b

优先级问题:

“||” 比 “or” 的优先级高
eg:

1.5.7其他运算符

①错误运算符@
当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
eg:

②执行运算符

PHP 支持一个执行运算符:反引号(` `)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。
注意事项:
1)反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
2)与其它某些语言不同,反引号不能在双引号字符串中使用。
eg:

$output";?>

③字符串运算符

相当于链接符,有两个字符串(string)运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”)
eg:

④类型运算符 instanceof

可以参考:

1.5.8运算符优先级

参考表:

转载地址:http://jqmcn.baihongyu.com/

你可能感兴趣的文章
Cookie
查看>>
Session
查看>>
Springboot项目集成jsp
查看>>
Vue的安装
查看>>
Oracle数据库错误Update数据恢复
查看>>
Sql Server数据库查询死锁和解决死锁
查看>>
Mysql实现乐观锁
查看>>
SpringBoot项目自定义Filter过滤器
查看>>
Springboot项目实现自定义拦截器
查看>>
德鲁伊后台监控配置
查看>>
正向代理和反向代理
查看>>
Stream常用方法使用案例
查看>>
Log4j日志的配置文件
查看>>
Slf4j和logback日志组合
查看>>
Mysql的读写分离和主从复制过程概述
查看>>
Java中的synchronized与lock的区别
查看>>
基于Springboot注解形式进行模糊查询
查看>>
通用Sql返回自增长insert后的id
查看>>
SQL返回Map集合或者对象
查看>>
GC垃圾回收机制----GC回收算法(GC机制必会知识点)
查看>>