首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.8 表达式

表达式(expression)是一个短语,它表示程序中的某个特定动作。所有表达式至少由一个操作数和一个或多个操作符组成。下面是几个例子:

3.8.1 操作数

操作数是表达式的输入。通过每天的数学计算,以及前面的编程经验,你可能对操作数的处理和使用早已经熟悉。下面是操作数的一些例子:

3.8.2 操作符

操作符(operator)是表达式中指定某个动作的符号。许多操作符对你来说可能已经很熟悉了。无论如何,要记住PHP会根据操作符(置于两个操作数之间)的类型自动进行类型转换,这在其他编程语言中并不多见。

操作符的优先级和结合性是编程语言的重要特性。本节将介绍这两个概念。表3-3包含了所有操作符的完整列表,这里操作符按照优先级从高到低的顺序排列。

表3-3 操作符优先级、结合性和作用

操作符

结合性

作    用

new

对象初始化

()

建立表达式的子组

[]

包围索引

! ~ ++ --

布尔非,按位取反,自增,自减

@

错误控制

/ * %

除法,乘法,取模

+ - .

加法,减法,拼接

<< >>

左移,右移

< <= > >=

小于,小于等于,大于,大于等于

== != === <>

等于,不等于,相同,不相同

& ^ |

位与,位异或,位或

&& ||

布尔与,布尔或

?:

三元操作符

= += *= /= .= %=&=

|= ^= <<= >>=

赋值操作符

AND XOR OR

布尔与,布尔异或,布尔或

,

分隔表达式,例子:

$days = array(1=>"Monday", 2=>"Tuesday")

1. 操作符优先级

操作符优先级(operator precedence)是操作符的一个特性,确定以何种顺序计算周围的操作数。PHP遵循小学算术课所用的标准优先级规则。下面是几个例子:

可以等价地写为:

因为乘法操作符的优先级比加法操作符的高。

2. 操作符结合性

操作符的结合性(associativity)指定了相同优先级运算(即有相同的优先级值,如表3-3所示)的计算顺序。结合性可以有两个方向,从左到右或从右到左。从左到右结合性表示组成表达式的各种运算从左向右进行计算。考虑如下例子:

这个例子与下例相同:

这个表达式结果为840,因为乘法(*)操作符的结合性是从左至右。

相反,从右到左结合性将从右到左地计算相同优先级的操作符:

上面的示例与下例相同:

计算这个表达式时,变量$value、$a、$b和$c都将包含值5,因为赋值操作符(=)的结合性是从右到左。

3. 算术操作符

算术操作符如表3-4所列,用于完成各种算术运算,在许多PHP程序中将会频繁用到。幸运的是,这些算术操作符很容易使用。

表3-4 算术操作符

示    例

说    明

输    出

$a + $b

加法

$a和$b的和

$a - $b

减法

$a和$b的差

$a * $b

乘法

$a和$b的乘积

$a / $b

除法

$a和$b的商

$a % $b

取模

$a除以$b的余数

顺便提一下,PHP提供了大量预定义的数学函数,能够完成基本的转换和计算对数、平方根和几何值等运算。这些函数的最新列表请查看手册。

4. 赋值操作符

赋值操作符(assignment operator)将一个数据值赋给一个变量。最简单的赋值操作符会赋某个值,有些操作符(称为快捷赋值操作符)在赋值之前会完成另外某个运算。表3-5列出了一些使用此类操作符的例子。

表3-5 赋值操作符

示    例

说    明

输    出

$a = 5

赋值

$a等于5

$a += 5

加法赋值

$a等于$a减5

$a *= 5

乘法赋值

$a等于$a乘以5

$a /= 5

除法赋值

$a等于$a除以5

$a .= 5

拼接赋值

$a等于$a拼接5

5. 字符串操作符

PHP的字符串操作符(参见表3-6)提供了拼接字符串的便捷方式。有两个这样的操作符,包括拼接操作符(.)和拼接赋值操作符(.=),这在上一节已经讨论过。

表3-6 字符串操作符

示    例

说    明

输    出

$a = "abc"."def";

拼接

$a赋值为字符串“abcdef”

$a .= "ghijkl";

拼接赋值

$a等于它的当前值与“ghijkl”的拼接结果

注解   拼接(concatenate)表示将两个或多个对象组合起来,形成一个实体。

下面是一个使用字符串操作符的例子:

PHP的字符串处理功能并非只包括这两个拼接操作符。有关功能请参阅第9章。

6. 自增和自减操作符

自增(++)和自减(--)操作符如表3-7所列,为代码的简洁性提供了一些便利。这是一种简化的方式,可以将变量的当前值增1或减1。

表3-7 自增和自减操作符

示    例

说    明

输    出

++$a, $a++

自增

$a增1

--$a, $a--

自减

$a减1

这些操作符可以放在变量的任意一边,但放的位置不同会有一些略微不同的效果。考虑以下示例的输出:

可以看出,自增和自减操作符使用的顺序对变量的值有重要影响。将操作数放在操作符前面称为前自增和前自减运算,而放在后面则称为后自增和后自减运算。

7. 逻辑操作符

与算术操作符类似,逻辑操作符(参见表3-8)在许多PHP应用程序中都起到重要作用,利用逻辑操作符可以根据多个变量的值进行判断,这使得控制程序的流程成为可能。逻辑操作符常用于控制结构中,如if条件和while及for循环。

表3-8 逻辑操作符

示    例

说    明

输    出

$a && $b

如果$a和$b都为true,则输出true

$a AND $b

如果$a和$b都为true,则输出true

$a || $b

如果$a或$b为true,则输出true

$a OR $b

如果$a或$b为true,则输出true

!$a

如果$a不为true,则输出true

NOT $a

如果$a不为true,则输出true

$a XOR $b

异或

如果只有$a或$b为true,则输出true

逻辑操作符还常用于提供其他运算结果的详细信息,尤其是有返回值的运算:

会有两种输出:

  ● 文件filename.txt存在。

  ● 输出句子“File does not exist!”。

8. 相等操作符

相等操作符(参见表3-9)用来比较两个值,测试其相等性。

表3-9 相等操作符

示    例

说    明

输    出

$a == $b

是否相等

如果$a和$b相等,则输出true

$a != $b

是否不相等

如果$a和$b不相等,则输出true

$a === $b

是否相同

如果$a和$b相等,并且类型也相同,则输出true

只用一个等号测试相等性(例如$a = $b)是个很常见的错误,即使是有经验的程序员也常犯这个错误。记住,这会变成将$b的值赋给$a,而不会得到预期的结果。

9. 比较操作符

比较操作符(参见表3-10)与逻辑操作符相似,通过比较两个或多个变量值的结果,提供了一种控制程序流程的方法。

表3-10 比较操作符

示    例

说    明

输    出

$a < $b

小于

如果$a小于$b,则输出true

$a > $b

大于

如果$a大于$b,则输出true

$a <= $b

小于或等于

如果$a小于或等于$b,则输出true

(续)

示    例

说    明

输    出

$a >= $b

大于或等于

如果$a大于或等于$b,则输出true

($a == 12) ? 5 : -1

三元运算

如果$a等于12,返回值为5;否则返回值为-1

注意,比较操作符只能用来比较数值。虽然也可以使用这些操作符比较字符串,但很可能得不到预期的结果。要比较字符串值,还有另外一组预定义的函数,有关内容将在第9章详细讨论。

10. 位操作符

位操作符(bitwise operator)在组成整数值的各个“位”层次上检查和处理整数值(这正是位操作符名字的由来)。为了充分理解这个概念,需要至少对十进制数的二进制表示有一些基本了解。表3-11列出了一些十进制数及其相应的二进制表示形式。

表3-11 二进制表示形式

十进制整数

二进制表示形式

2

10

5

101

10

1010

12

1100

145

10010001

1 452 012

101100010011111101100

表3-12所列的位操作符是逻辑操作符的一些变体,但会得到完全不同的结果。

表3-12 位操作符

示    例

说    明

输    出

$a & $b

$a和$b包含的每一位相与

$a | $b

$a或$b包含的每一位相或

$a ^ $b

异或

$a或$b包含的每一位相异或

~ $b

$b中的每一位取反

$a << $b

左移

$a将接收到$b左移两位的值

$a >> $b

右移

$a将接收到$b右移两位的值

如果希望学习关于二进制编码和位操作符的更多知识,了解其重要性,请访问Randall Hyde提供的在线参考:The Art of Assembly Language Programming(汇编语言编程艺术),位于http://webster.cs.ucr.edu/。这是Web上的最棒的资源之一。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论