前端学PHP之运算符
前面的话
运算符是可以通过给出的一或多个表达式来产生另一个表达式的东西。与javascript类似,php也拥有类似的运算符语法,本文将详细介绍php运算符
[注意]关于javascript运算符语法移步至此
总括
运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。最后是唯一的三元运算符 ? :,可接受三个值;通常就简单称之为“三元运算符”
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18
如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)
[注意]没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=
优先级
结合方向 运算符 附加信息
无 clone new clone 和 new
左 [ array()
右 ++ -- ~ 类型和递增/递减
无 instanceof 类型
右 ! 逻辑运算符
左 * / % 算术运算符
左 + - . 算术运算符和字符串运算符
左 << >> 位运算符
无 < <= > >= 比较运算符
无 == != === !== <> <=> 比较运算符
左 & 位运算符和引用
左 ^ 位运算符
左 | 位运算符
左 && 逻辑运算符
左 || 逻辑运算符
左 ?? 比较运算符
左 ? : ternary
右 = += -= *= **= /= .= %= &= |= ^= <<= >>= 赋值运算符
左 and 逻辑运算符
左 xor 逻辑运算符
左 or 逻辑运算符
算术运算符
-$a 取反 $a 的负值。
$a + $b 加法 $a 和 $b 的和。
$a - $b 减法 $a 和 $b 的差。
$a * $b 乘法 $a 和 $b 的积。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的余数
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)
取模运算符 % 的结果和被除数的符号(正负号)相同。即 a % b 的结果和 a 的符号相同
<?php echo (5 % 3)."\n"; // prints 2
echo (5 % -3)."\n"; // prints 2
echo (-5 % 3)."\n"; // prints -2
echo (-5 % -3)."\n"; // prints -2 ?>
赋值运算符
基本的赋值运算符是“=”,它实际上意味着把右边表达式的值赋给左边的运算数
赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3
<?php
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。
?>
在基本赋值运算符之外,还有适合于所有二元算术,数组集合和字符串运算符的“组合运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它
x = y
x += y
x -= y
x *= y
x /= y
x %= y
<?php
$a = 3;
$a += 5; // $a = $a + 5;
$b = "Hello ";
$b .= "There!"; //$b = $b . "There!";
?>
引用赋值
PHP 支持引用赋值,引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西
<?php
$a = 3;
$b = &$a; // $b 是 $a 的引用 print "$a\n"; // 输出 3
print "$b\n"; // 输出 3 $a = 4; // 修改 $a print "$a\n"; // 输出 4
print "$b\n"; // 也输出 4,因为 $b 是 $a 的引用,因此也被改变
?>
递增/递减
例子 名称 效果
++$a 前加 $a 的值加一,然后返回 $a
$a++ 后加 返回 $a,然后将 $a 的值加一
--$a 前减 $a 的值减一, 然后返回 $a
$a-- 后减 返回 $a,然后将 $a 的值减一
<?php
$x=10;
echo ++$x; // 输出 11
$y=10;
echo $y++; // 输出 10
$z=5;
echo --$z; // 输出 4
$i=5;
echo $i--; // 输出 5
?>
位运算符
位运算符允许对整型数中指定的位进行求值和操作
例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1
$a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1
~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然
$a << $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)
$a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)
比较运算符
比较运算符,如同它们名称所暗示的,允许对两个值进行比较
例子 名称 结果
$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 大于等于 TRUE,如果 $a 大于或者等于 $b
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 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";//输出0
break;
case "a":
echo "a";
break;
}
?>
比较多种类型
运算数 1 类型 运算数 2 类型 结果
null 或 string string 将 NULL 转换为 "",进行数字或词汇比较
bool 或 null 任何其它类型 转换为 bool,FALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能比较string、resource、number string、resource、number 将字符串和资源转换成数字,按普通数学比较
array array 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较
object 任何其它类型 object 总是更大
array 任何其它类型 array 总是更大
三元运算符
"?:"三元运算符是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3
<?php
$a = 78;//成绩
$b = $a >=60?"及格":"不及格";
echo $b;//及格
?>
错误控制运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉
[注意]错误控制前缀@运算符只对表达式有效,@不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构如if和foreach等
<?php
$a = 1;
echo @ $a;//
$b;
echo @ $b;//不报错
?>
逻辑运算符
例子 名称 结果
$a and $b And(逻辑与) TRUE,如果 $a 和 $b 都为 TRUE
$a or $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE
$a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是
! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE
$a && $b And(逻辑与) TRUE,如果 $a 和 $b 都为 TRUE
$a || $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE
<?php // foo() 根本没机会被调用,被运算符“短路”了 $a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo()); // --------------------
// "||" 比 "or" 的优先级高 // 表达式 (false || true) 的结果被赋给 $e
// 等同于:($e = (false || true))
$e = false || true; // 常量 false 被赋给 $f,true 被忽略
// 等同于:(($f = false) or true)
$f = false or true; var_dump($e, $f);//bool(true) bool(false) // --------------------
// "&&" 比 "and" 的优先级高 // 表达式 (true && false) 的结果被赋给 $g
// 等同于:($g = (true && false))
$g = true && false; // 常量 true 被赋给 $h,false 被忽略
// 等同于:(($h = true) and false)
$h = true and false; var_dump($g, $h);//bool(false) bool(true)
?>
字符串运算符
有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!" $a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!"
?>
数组运算符
例子 名称 结果
$a + $b 联合 $a 和 $b 的联合
$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
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y;
var_dump($z);//array(4) { ["a"]=> string(3) "red" ["b"]=> string(5) "green" ["c"]=> string(4) "blue" ["d"]=> string(6) "yellow" }
echo "<br>";
var_dump($x == $y);//bool(false)
echo "<br>";
var_dump($x === $y);//bool(false)
echo "<br>";
var_dump($x != $y);//bool(true)
echo "<br>";
var_dump($x <> $y);//bool(true)
echo "<br>";
var_dump($x !== $y);//bool(true)
?>
前端学PHP之运算符的更多相关文章
- 前端学做 PPT
前端学做 PPT 公司做技术分享.年终总结都需要用到ppt. 要快速.省事的做出高质量的 ppt,一方面需要熟练使用制作 ppt 的工具,另一方面得知道用工具做成什么样子才是好作品.前者比较简单,后者 ...
- 前端学HTTP之网络基础
× 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...
- 前端-JavaScript2-5——JavaScript之运算符进阶
运算符(Operators,也翻译为操作符),是发起运算的最简单形式. 运算符的分类见仁见智,我们的课程对运算符进行如下分类: 数学运算符(Arithmetic operators) 比较运算符(Co ...
- 前端学HTTP之数据传输
× 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...
- 前端学PHP之面向对象系列第五篇——对象操作
× 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...
- 前端学PHP之面向对象系列第四篇——关键字
× 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- 前端学PHP之数组函数
× 目录 [1]键值操作 [2]记数[3]回调函数[4]组合[5]栈和队列[6]顺序 前面的话 PHP中的数组功能非常强大,数组处理函数有着强大.灵活.高效的特点.PHP5提供了近100个操作数组的系 ...
- 前端学PHP之数据类型
× 目录 [1]总括 [2]布尔型 [3]整型[4]浮点型[5]字符串[6]数组[7]对象[8]NULL[9]资源 前面的话 同javascript一样,php也是一门弱类型语言,或者说成类型松散的语 ...
随机推荐
- 手把手教你搭建深度学习平台——避坑安装theano+CUDA
python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...
- DB2数据库参数建议(AIX)
修改用户最大进程数: chdev -l sys0 -a maxuproc=' 用户资源配置:对实例用户,fence用户,应用用户添加如下限制: db2inst1 : fsize=- fsize_har ...
- 软件工程:Wordcount程序作业
由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...
- Cannot connect to the Docker daemon. Is the docker daemon running on this host?
解决方案 docker-machine restart&&eval "$(docker-machine env default)"&&docker- ...
- 测试 MathJax 排版功效
这是第一篇博文,用于检测博客园提供的数学排版功能,下面是一些数学公式. \[ \text{sgn}(\mathbf{w}^T\phi(\mathbf{x})+b) = \text{sgn}\left( ...
- Java 用程序给出随便大小的10 个数,序号为1-10,按从小到大顺序输出,并输出相应的序号?
import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.uti ...
- maven报错非法字符:\65279 错误
开发中一个项目很早就报这个错,maven报错非法字符:\65279 错误,今天终于忍无可忍要解决它 :编译java文件的时候,有些java文件报非法字符 \65279错误,在网上找和很多 方法,也试了 ...
- C# 匿名对象随笔
最新更新请访问: http://denghejun.github.io C#中匿名对象的一般写法是这样的: object o=new {Name="TestName"}; ...
- 关于Mathematica 的cdf 文件的嵌入应用
// // '); cdf.embed('http://files.cnblogs.com/Leonhard-E/AreaOfANormalDistribution.cdf', 635, 913); ...
- 解读ASP.NET 5 & MVC6系列(4):核心技术与环境配置
asp.net 5是下一代的asp.net,该版本进行了全部重写以适用于跨平台,新新版本中,微软引入了如下工具与命令:DNVM.DNX.DNU. DNVM(.NET Version Manager): ...