一、算术运算符
1. 概览
文章插图
2. TIPS
除法运算符总是返回浮点数 。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除 , 这时它返回一个整数 。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分) 。
取模运算符 % 的结果和被除数的符号(正负号)相同 。即 $a % $b 的结果和 $a 的符号相同 。例如:
echo (5 % 3)."n"; // prints 2
echo (5 % -3)."n"; // prints 2
echo (-5 % 3)."n"; // prints -2
echo (-5 % -3)."n"; // prints -2
二、位运算符
1. 概览
文章插图
2. TIPS
位移在 php 中是数学运算 。
向任何方向移出去的位都被丢弃 。
左移时右侧以零填充 , 符号位被移走意味着正负号不被保留 。
右移时左侧以符号位填充 , 意味着正负号被保留 。
使用位运算符时要特别注意优先级 。例如 :
$a & $b == true 先进行比较再进行按位与;
($a & $b) == true 则先进行按位与再进行比较 。
三、比较运算符
1. 概览
文章插图
2. TIPS
如果比较一个数字和字符串或者比较涉及到数字内容的字符串 , 则字符串会被转换为数值并且比较按照数值来进行 。此规则也适用于 switch 语句 。当用 === 或 !== 进行比较时则不进行类型转换 , 因为此时类型和数值都要比对 。
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // 永远不会到达a , 因为 "a" 已经与 0 匹配
echo "a";
break;
}
?>
3. 对于多种类型 , 比较运算符根据下表比较(按顺序)
文章插图
4. 松散比较表
文章插图
四、递增/递减运算符
1. 概览
文章插图
2. TIPS
递增/递减运算符不影响布尔值 。
递减 NULL 值也没有效果 , 但是递增 NULL 的结果是 1 。
在处理字符变量的算数运算时 , PHP 沿袭了 Perl 的习惯 , 而非 C 的 。
例如 , 在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA' , 而在 C 中 , a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90 , '[' 的 ASCII 值是 91) 。
注意字符变量只能递增 , 不能递减 , 并且只支持纯字母(a-z 和 A-Z) 。
递增/递减其他字符变量则无效 , 原字符串没有变化 。
五、逻辑运算符
1. 概览
文章插图
2. TIPS
“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同 。
// "&&" 比 "and" 的优先级高
// 表达式 (true && false) 的结果被赋给 $g
// 等同于:($g = (true && false))
$g = true && false;
// 常量 true 被赋给 $h , false 被忽略
// 等同于:(($h = true) and false)
$h = true and false;
六、数组运算符
1. 概览
文章插图
2. TIPS
数组中的单元如果具有相同的键名和值则比较时相等
$a = array("Apple", "banana");
【PHP运算符知识点整理】$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
+ 运算符 和 array_merge() 的区别
当数组下标为字符时 , 遇到相同键名 , + 运算符会抛弃掉后面的值; array_merge()会用后面的值覆盖前面的值 。
推荐阅读
- php网站启用伪静态的方法
- PHP一句话木马小结与SQL语句写一句话木马
- PHP调试之ChromePHP
- php多态性如何理解
- php如何搭建微服务
- php闭包有什么用?
- 基于ThinkPHP5.1.34 LTS开发的快速开发框架DolphinPHP
- phpstudy中apache无法启动怎么解决?
- php有多线程吗
- php运行模式有哪几种