本文共 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/