1. Chapter7 表达式和运算符

PHP是一门服务端编程语言,PHP要完成的工作与“计算”息息相关。程序中的计算与数学中的计算并无本质上的差距。有计算则一定有两个因素,那就是运算数和运算符。数学中的运算数即程序中的变量,在上一节中已经进行了详细的介绍。那么接下来的内容就是“计算”中的另一大元素,运算符。

在进行详细介绍各种运算符之前,我们需要先了解一个程序中的概念——表达式。

1.1. 表达式

何为表达式?表达式的概念可以类比于数学中的“算式”。将需要参与计算的变量与运算符一起,结合成可以计算的形式即为表达式。表达式可长可短,无论表达式形式如何,都一定可以计算出一个唯一的值。和函数的概念相同,这个值可以被称作表达式的返回值。

1.2. 运算符

表达式可以类比为“算式”,那么PHP的运算符和数学中的运算符则相差无几。PHP中运算符的概念是在数学的四则运算的概念上进行了一定程度上的扩充,来完成更完备的计算工作。例如在前文中提到的

$a = 1;

一句代码中,=就是一个运算符,叫做“赋值运算符”。常见的运算符及其作用可以用下表来概括。

在列举之前需要提及一个概念,叫“元”。每个运算符都可以从“元”的角度来进行评价,我们称一个运算符是“几元运算符”。元的意义就是,这个运算符需要几个运算数来参加运算。例如加运算是二元,因为需要两个数相加。

1.2.1. 赋值运算符

运算符 名称 作用 举例 备注
= 赋值运算符 赋值 $a = $b + 1 2 将右边所得的数值赋值给左边的变量。

1.2.2. 算数运算符

算术运算符通常用来进行算数运算,两边的操作数都是具体的数值或表示数值的变量,返回值是计算结果。

运算符 名称 作用 举例 备注
+ 加号运算符 “加”运算 $a + $b 2
- 减号运算符 “减”运算 $a - $b 2
* 乘号运算符 “乘”运算 $a * $b 2
/ 除号运算符 两数相除 $a / $b 2
% 取模运算符 求余运算 $a % $b 2 两数相除,取余。整除得0。
++ 自加运算符 自加运算 $a ++ 1 将运算数的值+1
-- 自减运算符 自减运算 $a -- 1 将运算数的值-1

自加和自减运算符可以用在运算数左边,也可以用在右边,两种方式有各自的不同。这个区别将在循环结构一节有所提及。

1.2.3. 逻辑运算符

逻辑运算符通常进行逻辑运算,通常是进行某一种判断。运算结果通常是true(真)和false(假)。

运算符 名称 作用 举例 备注
&& “与”运算符 “与”运算 $a && $b 2 两边的值进行逻辑与运算,返回值是bool型,true或false。
\ \ “或”运算符 “或”运算 $a \ \ $b 2 两边的值进行逻辑或运算,返回值是bool型,true或false。
! “非”运算符 “非”运算 !$a 1 对变量进行逻辑非运算,返回值是bool型,true或false。
> 大于 $a > $b 2
< 小于 $a < $b 2
== 等于 $a = $b 2 判断两边变量是否数值相等
>= 大于等于 $a >= $b 2
<= 小于等于 $a <= $b 2
!=、<> 不等与 $a != $b 2
=== 完全相等 $a === true 2 判断两边变量的数值和类型是否完全相等
?: 问号运算符 判断条件决定执行哪一句 ($a == 1)?$b = 4:$b = 2; 3 唯一的三元运算符。判断第一句的真假,真则执行第二句,假则执行第三句。

1.2.4. 字符串连接符

运算符 名称 作用 举例 备注
. 字符串连接符 连接两个字符串 $a.$b 2 将两边的字符串连接成一个新的字符串。

1.2.5. 运算赋值运算符

一些运算可以和赋值运算符同时使用,可以在计算的同时执行赋值操作。可以使代码更加精简、美观。

这类运算符类似这样:

+=、-=、*=、/=、&=、\|=、!=、.=

它们的作用是,先进行相关运算,将得到的结果赋值给左边的变量,例如:

$a = 1;
$b += $a;   //$b == 2

1.2.6. 位运算符

将整数视为二进制进行运算。位运算在大部分场景下很少见,在一些特殊场合却非常好用。 例如RGB颜色由6个16进制数组成,例如#FF0000,前两位数表示红色亮度为255,绿色和蓝色均为0。假如我需要获取绿色的亮度,此时就需要用到位运算来实现了。将FF0000和00FF00做按位与,即可获取到绿色的亮度。按位与的特点是有两个比特,只要存在0则结果为0。如果两个比特都是1时,则结果为1。

位运算的实例
F8的二进制为1111 1000
C9的二进制为1100 1001
F8和C9做按位与运算,按位与是两个比特全为1时,结果为1。
F8和C9的高4位分别为1111和1100,按照按位与的定义,结果应该为1100,因为只有前两位对应位置的二进制数才都为1。
同理计算第四位,F8和C9分别为1000和1001,结果应该为1000,因为两个数只有第一个位置的二进制数均为1,其他都不满足这个条件,所以结果为1000。将结果合并起来,结果为1100 1000。

运算符 名称 作用 举例 备注
& 按位与 将两个数字做按位与运算,有0则结果为0 0x4 & 0x6 2
\ 按位或 将两个数字做按位或运算,有1则结果为1 0x4 \ 0x6 2
^ 按位异或 将两个数字做按位异或运算,一个为1一个为0时,结果为1,反之为0,即不同为1,相同为0 0x4 ^ 0x6 2
~ 按位取反 将一个数字做按位取反,当为1时结果为0,当为0时结果为1 ~ 0x6 1
<< 左移 将数字按位左移,空位补0(每一次移动都表示“乘以 2”) 0x6 << 2 2
>> 右移 将数字按位右移,空位补0(每一次移动都表示“除以 2”) 0x6 >> 1 2

位移在 PHP 中是数学运算。向任何方向移出去(超出范围)的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

运算符连接起了变量,而表达式则是运算符和变量结合的成果。之前的内容,我们可以理解为学习了“单词”和“短语”。接下来将接触到的就是“句子”和“段落”,最后写成整篇代码就是“文章”。

这本书是xt写的/上次修改: 2019-04-17 14:57:44

results matching ""

    No results matching ""