PHP Comparision Operater
5.4 运算符
和其他的程序语言一样,PHP也有许多运算符。运算符可以用来处理数字、字符串及其他的比较运算和逻辑运算等。本节主要介绍常用的运算符,以及运算符的优先级。
5.4.1 常用的运算符
PHP有三种类型的运算符,它们是:
● 一元运算符,只运算一个值,例如:!(取反运算符)或++(加一运算符)。
● 二元运算符,PHP 支持的大多数运算符都是这种,例如:$a + $b。
● 三元运算符,即? :,它被用来根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序路线中选择。
PHP中常用的运算符有算术运算符、赋值运算符、比较运算符、三元运算符、错误控制运算符、递增/递减运算符、逻辑运算符、字符串运算符、数组运算符等。下面我们分别介绍。
1.算术运算符
PHP的算术运算符如表5-2所示。
表5-2 算术运算符
例 子 |
名 称 |
结 果 |
-$a |
取反 |
$a 的负值 |
$a + $b |
加法 |
$a 和 $b 的和 |
$a - $b |
减法 |
$a 和 $b 的差 |
$a * $b |
乘法 |
$a 和 $b 的积 |
$a / $b |
除法 |
$a 除以 $b 的商 |
$a % $b |
取模 |
$a 除以 $b 的余数 |
注意,除号(/)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
2.赋值运算符
基本的赋值运算符是=,它意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,$a = 3的值是 3。例如:
<?php
$a = ($b = 4) + 5; // 变量$a的值是:9
?>
在基本赋值运算符之外,还有适合于所有二元算术和字符串运算符的“组和运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
<?php
$a = 3;
$a += 5; // 等价于:$a = $a + 5;
$b = "Hello ";
$b .= "world!"; //等价于: $b = $b . "world!";
?>
3.比较运算符
比较运算符,允许对两个值进行比较,PHP的比较运算符如表5-3所示。
表5-3 比较运算符
例 子 |
名 称 |
结 果 |
$a == $b |
等于 |
True,如果 $a 等于 $b |
$a === $b |
全等 |
True,如果 $a 等于 $b,并且它们的类型也相同(PHP 4 引进) |
$a != $b |
不等 |
True,如果 $a 不等于 $b |
$a <> $b |
不等 |
True,如果 $a 不等于 $b |
$a !== $b |
非全等 |
True,如果 $a 不等于 $b,或者它们的类型不同(PHP 4 引进) |
$a < $b |
小于 |
True,如果 $a 严格小于 $b |
$a > $b |
大于 |
True,如果 $a 严格 $b |
$a <= $b |
小于等于 |
True,如果 $a 小于或者等于 $b |
$a >= $b |
大于等于 |
True,如果 $a 大于或者等于 $b |
如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。多类型的比较规则如表5-4所示。
表5-4 多类型的比较规则
运算数1的类型 |
运算数2的类型 |
结 果 |
null或string |
string |
将NULL转换为"",进行数字或词汇比较 |
boolean或null |
任何其他类型 |
转换为boolean,False < True |
object |
object |
内置类可以定义自己的比较,不同类不能比较,相同类和数组比较其属性 |
string、resource string或number |
resource或number |
将字符串和资源转换成数字,按普通数字比较 |
array |
array |
具有较少成员的数组较小,如果运算数1中的键不存在于运算数2中则数组无法比较,否则逐个值比较 |
array |
任何其他类型 |
array总是更大 |
object |
任何其他类型 |
object总是更大 |
4.三元运算符
三元运算符是?:,语法如下:
(expr1) ? (expr2) : (expr3)
首先对expr1求值,若结果为True,则表达式(expr1) ? (expr2) : (expr3)的值为 expr2,否则其值为expr3。例如:
<?php
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
?>
首先判断$_POST['action']变量是否为空值,若是则给$action赋值为default,否则将$_POST['action']变量的值赋值给$action。这个三元运算符的功能和if...else语句很相似,我们可以将上面的代码改写成以下的代码:
<?php
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
5.错误控制运算符
PHP支持一个错误控制运算符@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
@运算符只对表达式有效。那么,何时使用此运算符呢?一个简单的规则就是,如果能从某处得到值,就能在它前面加上@运算符。例如,可以把它放在变量,函数和include()调用,常量等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。
对于如下的代码:
<?php
$Connid = mysql_connect ("localhost","username","pwd");
if ( $Connid )
echo "连接成功!";
else
echo "连接失败!";
?>
如果mysql_connect()执行失败,将显示系统的错误提示,而后继续执行下面的程序。如果不想显示系统的错误提示,并希望失败后立即结束程序,则可以改写上面的代码如下:
<?php
$Connid = @mysql_connect ("localhost","username","pwd") or die ("不能连接数据库服务器");
?>
在mysql_connect()函数前加上@运算符来屏蔽系统的错误提示,同时使用die()函数给出自定义的错误提示,然后立即退出程序。这种用法在大型程序中很常见。
6.递增/递减运算符
PHP支持C风格的前/后递增与递减运算符,如表5-5所示。
表5-5 递增/递减运算符
例 子 |
名 称 |
效 果 |
++$a |
前加 |
$a的值加一,然后返回$a |
$a++ |
后加 |
返回$a,然后将$a的值加一 |
--$a |
前减 |
$a的值减一,然后返回$a |
$a-- |
后减 |
返回$a,然后将$a的值减一 |
注意,递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是1。
7.逻辑运算符
PHP 的逻辑运算符,如表5-6所示。
表5-6 逻辑运算符
例 子 |
名 称 |
结 果 |
$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 |
“与”和“或”有两种不同形式运算符,它们运算的优先级不同,&&和||优先级高。
8.字符串运算符
有两个字符串运算符。第一个是连接运算符(.),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(.=),它将右边参数附加到左边的参数后。例如:
<?php
$a = "Hello ";
$a = $a . "World!"; //此时 $a是 "Hello World!"
$b = "Hello ";
$b .= "World!"; //此时 $b 是 "Hello World!"
?>
9.数组运算符
PHP 的数组运算符,如表5-7所示。
表5-7 数组运算符
例 子 |
名 称 |
结 果 |
$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 |
+运算符把右边的数组附加到左边的数组后面,但是重复的键值不会被覆盖。下面通过一个实例来看一下如何用+运算符联合两个数组:
代码清单5-6 用+运算符联合两个数组(ex5_06.php)
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b;
echo "数组 /$a 和 /$b 联合之后 : <br>";
var_dump($c);
?>
在浏览器中浏览此文件,结果如图5-6所示。
图5-6 浏览ex5_06.php
可以看到,在联合之后的数组中,键“a”的值是“apple”,而不是“pear”,同样,键“b”的值是“banana”,而不是“strawberry”,但是键“c”的值是“cherry”。
在上面的代码中,使用了var_dump()函数,此函数用于显示一个或多个表达式的结构信息,包括表达式的类型与值。对于数组将递归地展开值。
5.4.2 运算符的优先级
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1 + 5 * 3的结果是16而不是18是因为乘号(*)的优先级比加号(+)高。必要时可以用括号来强制改变优先级。例如(1 + 5) * 3的值为18。使用括号也可以增强代码的可读性。如果运算符优先级相同,则使用从左到右的左结合顺序(左结合表示表达式从左向右求值,右结合相反)。
表5-8从高到低列出了PHP所有运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
表5-8 运算符优先级
结合方向 |
运 算 符 |
附加信息 |
非结合 |
new |
new |
左 |
[ |
array() |
非结合 |
++ -- |
递增/递减运算符 |
(续)
结合方向 |
运 算 符 |
附加信息 |
非结合 |
! ~ - (int) (float) (string) (array) (object) @ |
类型 |
左 |
* / % |
算数运算符 |
左 |
+ - . |
算数运算符和字符串运算符 |
左 |
<< >> |
位运算符 |
非结合 |
< <= > >= |
比较运算符 |
非结合 |
== != === !== |
比较运算符 |
左 |
& |
位运算符和引用 |
左 |
^ |
位运算符 |
左 |
| |
位运算符 |
左 |
&& |
逻辑运算符 |
左 |
|| |
逻辑运算符 |
左 |
? : |
三元运算符 |
右 |
= += -= *= /= .= %= &= |= ^= <<= >>= |
赋值运算符 |
左 |
and |
逻辑运算符 |
左 |
xor |
逻辑运算符 |
左 |
or |
逻辑运算符 |
左 |
, |
多处用到 |
PHP Comparision Operater相关推荐
- python使用matplotlib可视化不同年份、不同项目的均值(mean)对比条形图(bar plot comparision of mean with different years)
python使用matplotlib可视化不同年份.不同项目的均值(mean)对比条形图(bar plot comparision of mean with different years) 目录
- C++尽量在operater=中处理“自我赋值”
operater=中处理"自我赋值 下面的operator=实现是一份不安全的实现,在自赋值时会出现问题: 1.在开头添加"证同测试" c++ 2.通过确保异常安全来获得 ...
- k8s operater简介
在谈operater之前,我觉得有必要先回顾下k8s资源.k8s中将所有的资源抽象为内存,资源实例化之后称之为对象.资源大体上分为两大块: 1.内资资源类型: 工作负载型资源:Pod.Deployme ...
- 编写自己的kubernetes operater
在k8s中有许多编排工具,目前比较热门的是包管理工具Helm,如果说docker是奠定的单实例的标准化交付,那么Helm则是集群化多实例.多资源的标准化交付,但是helm 只能实现简单的编排能力,一些 ...
- c++ 中operater delete和operater new重载
如果一个类中重载了operater delete (void* pMem)和 operater new(size_t nSize) 函数 如: static void* operator new(si ...
- JavaSE-02 Operater运算符
JavaSE 二.Operater运算符 Demo1:二元运算 int a = 11;int b = 21;System.out.println(a+b);System.out.println(a-b ...
- 基本函数input() print() map() filter() reduce()和lambda()算子-operater用法
#输入逗号分割的两个数字--input输入的内容,默认为字符类型 x,y =input("input:").split(",") print(x,y)#输入的多 ...
- Overall Comparision With WCDMA
- flink查看operater链的中间结果+SingleOutputStreamOperator的用法
flink的算子写法常常是 data.func1.func2.func3...... 这种写法就不太好查看中间的结果到底是啥,不太好调试. 下面换一种写法: data func1Operator=.. ...
最新文章
- 关于socket的一些探究
- 网络编程学习笔记(freeaddrinfo函数)
- USB基础---OHCI、UHCI、EHCI和XHCI控制器简介
- 数据结构之希尔排序图文详解及代码(C++实现)
- AI显微镜面市:20分钟诊断疟疾,精度满足世卫最高标准
- Arcpy 实现NDVI最大值合成/平均值合成
- 一文读懂PCB品质体系认证
- CC2500的CCA
- justinmind夜话:数据母板系列视频教程之原型设计二十一条军规
- 【雕爷学编程】Arduino动手做(76)---2路光耦继电器模块
- Leet Code OJ 刷题顺序参考
- GTD时间管理阅读笔记
- Electron使用sqlite3 出现install aws-sdk和_handle的解决方案!
- java设计模式 之适配器模式
- Android数字华容道代码,Android源码 之《最强大脑》“数字华容道”
- python一只青蛙一次可以_python算法题 python123网站单元四题目
- reactos操作系统实现(47)
- win10邮件配置qq邮箱和outlook邮箱
- 设置Firefox(火狐)浏览器的中文菜单/界面
- linux设备驱动之PCI总线概述