章 14. 表达式

表达式是 PHP 最重要的基石。在 PHP

中,几乎你所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是“anything that has a value”。

最基本的表达式形式是常量和变量。当你键入“$a = 5”,即将值 '5' 分配给变量

$a。'5',很明显,值为 5,换句话说 '5' 是一个值为5的表达式(既然如此,'5' 是一个整型常量)。

赋值之后,你所盼望的情况是 $a 的值为5,因而如果你写下

$b = $a,期望的是它犹如 $b = 5 一样。换句话说,$a 是一个值也为 5

的表达式。如果一切运行正确,那这正是将要发生的正确结果。

稍微复杂的表达式例子就是函数。例如,考虑下面的函数:

{

return5;

}?>

假定你已经熟悉了函数的概念(如果不是的话,请看一下函数的相关章节),那么键入

$c = foo() 从本质上来说就如写下

$c = 5,而且你是正确的。 函数也是表达式,表达式的值即为它们的返回值。既然

foo() 返回5,表达式 ‘foo()’ 的值也是5。通常函数不会仅仅返回一个静态值,而可能会计算一些东西。

当然,PHP 中的值常常并非是整型的。PHP

支持三种标量值类型:整型值,浮点值和字符串值(标量值不能拆分为更小的单元,比如:数组)。PHP

也支持两种复合类型:数组和对象。这两种类型具可以赋值给变量或者从函数返回。

到目前为止,PHP/FI 2 的用户不应该感到任何的变化。然而,当许多其它语言为之努力的时候,PHP

在相同道路上促进了表达式的成长。PHP

是一种面向表达式的语言,从这一方面来讲几乎一切都是表达式。考虑刚才我们已经研究过的例子,“$a =

5”。可以轻松的看到这里有两个相关的值,整型常量 5,而且变量 $a

的值也被更新为 5。但是事实是:这里只有一个相关的附加值,即被分配的值本身。赋值操作计算需分配的值,即

5。实际上,意味着“$a = 5”,不必管它是做什么的,是一个值为 5

的表达式。因而,一些像这样的代码“$b = ($a = 5)”和“$a =5;

$b=5”(分号标志着语句的结束)。因为赋值操作的顺序是由右到左的,你也可以这么写“$b = $a =5”。

另外一个很好的面向表达式的例子就是前、后递增和递减。PHP/FI 2

和多数其它语言的用户应该比较熟悉变量 ++ 和变量 -- 符号。即递增和递减操作符。在

PHP/FI 2 中,语句“$a++”没有值(不是表达式),这样的话你便不能为其赋值或者以任何其它方式来使用它。PHP

通过将其变为了表达式,类似 C 语言,增强了递增/递减的能力。在

PHP 和 C 语言 中,有两种类型的递增前递增和后递增,本质上来讲,前递增和后递增均增加了变量的值,并且对于变量的影响是相同的。不同的是递增表达式的值。前递增,写做“++$variable”,求增加后的值(PHP

在读取变量的值之前,增加变量的值,因而称之为“前递增”)。后递增,写做‘$variable++’,求变量未递增之前的原始值(PHP

在读取变量的值之后,增加变量的值,因而叫做‘后递增’)。【译者注:前递增,++$a,则该表达式的值加

1;后递增,$a++,则该表达式的值不变。】

一个常用到表达式类型是比较表达式。这些表达式求值 0 或者

1,即 FALSE 或者 TRUE(分别的)。PHP

支持 >(大于),>=(大于等于),==(等于),!=(不等于),

语句中最常用的。

这里,我们将要研究的最后一个例子是组合的赋值操作符表达式。你已经知道如果想要为变量

$a 加1,可以简单的写‘$a++’或者‘++$a’。但是如果你想为变量增加大于

1 的值,比如 3,该怎么做?你可以多次写‘$a++’,但这样明显不是一种高效舒适的方法,一个更加通用的做法是‘$a

= $a + 3’。‘$a + 3’ 计算 $a 加上 3 的值,并且得到的值重新赋予变量

$a,于是 $a 的值增加了3。在 PHP 及其它几种类似 C

的语言中,你可以以一种更加简短的形式完成上述功能,因而也更加清楚快捷。为

$a 的当前值加 3,可以这样写:$a += 3。这里的意思是“取变量 $a 的值,加

3,得到的结果再次分配给变量 $a”。除了更简略和清楚外,也可以更快的运行。‘$a +=

3’的值,如同一个正常赋值操作的值,是赋值后的值。注意它不是 3,而是

$a 加上3的组合值(即已经分配给 $a 的值)【译者注:这里表达式‘$a += 3’的值是什么呢?不是

3,也不是 $a 的原始值,而是完成 +3 操作后变量 $a

的值】。 任何两位操作符都可以使用在复制操作符模式,例如‘$a -= 5’(从变量

$a 的值中减去 5),‘$b *= 7’ (变量 $b 乘以 7),等等。

有一些表达式,如果你没有在别的语言中看到过的话,可能认为它们是多余的,如三重操作符:

$first ? $second : $third

如果第一个子表达式的值是 TRUE(非零),那么计算第二个子表达式的值,其值即为整个表达式的值。否则,将是第三个子表达式的值。

下面的例子一般来说应该可以稍微帮你理解前、后递增和表达式:

{

return$i*2;

}$b=$a=5;/* assign the value five into the variable $a and $b */$c=$a++;/* post-increment, assign original value of $a

(5) to $c */$e=$d= ++$b;/* pre-increment, assign the incremented value of

$b (6) to $d and $e */

/* at this point, both $d and $e are equal to 6 */$f=double($d++);/* assign twice the value of $d before

the increment, 2*6 = 12 to $f */$g=double(++$e);/* assign twice the value of $e after

the increment, 2*7 = 14 to $g */$h=$g+=10;/* first, $g is incremented by 10 and ends with the

value of 24. the value of the assignment (24) is

then assigned into $h, and $h ends with the value

of 24 as well. */?>

在本章的开始,我们说过我们将会描述多种语句类型,并且如同许诺的那样,表达式可以是语句。尽管如此,不是每个表达式都是一个语句。而这样的话,一个语句,它的形式是

'expr' ';',一个表达式有一个分号结尾。在‘$b=$a=5;’,$a = 5

是一个有效的表达式,但是它却不是一个语句。‘$b=$a=5;’ 却是一个有效的语句。

最后一件值得提起的事情就是表达式的真实值。在许多事件中,大体上主要是在条件执行和循环中,不要专注于表达式中明确的值,反而要注意表达式的值是否是

TRUE 或者 FALSE。常量 TRUE 和 FALSE (大小写无关)是两种可能的

Boolean 值。如果有必要,一个表达式将自动转换为 Boolean。参见类型强制转换一节。

PHP 提供了一套完整强大的表达式,而为它提供完整的文件资料已经超出了本手册的范围。上面的例子应该为你提供了一个好的关于什么是表达式和怎样构建一个有用的表达式的概念。在本手册的其余部分,我们将始终使用

expr来表示一个有效的 PHP 表达式。

PHP怎么输入表达式,PHP: 表达式 - Manual相关推荐

  1. 表达式括弧匹配的检测【问题描述】利用栈的基本操作,完成表达式括弧匹配的检测。(假设表达式中只有()、[]、{}三类括弧)【输入形式】输入若干个表达式(字符串形式)。(提示:使用scanf

    表达式括弧匹配的检测 [问题描述] 利用栈的基本操作,完成表达式括弧匹配的检测.(假设表达式中只有().[].{}三类括弧) [输入形式] 输入若干个表达式(字符串形式).(提示:使用scanf(&q ...

  2. c/c++实现计算器功能(输入多项表达式 + - x / %,等号输出结果与 2 ,8,16,10进制结果,全清除) 退格操作

    c/c++实现计算器功能(输入多项表达式 + - x / ,等号输出结果.) 添加了退格操作,给补上了,在文章最后(附源码) 课程设计实现计算器功能 加减乘除 先讲大概思路,模拟计算器,大家用的计算器 ...

  3. [基础算法]通过后缀表达式实现表达式的计算

    要求说明: (1)从键盘接收算术表达式,以"#"表示接收结束: (2)输出算术表达式的值: (3)操作数仅限于非负整数,操作符只能是+.-.*./.^.(.) (4)可以判断表达式 ...

  4. C#复习笔记(4)--C#3:革新写代码的方式(Lambda表达式和表达式树)

    Lambda表达式和表达式树 先放一张委托转换的进化图 看一看到lambda简化了委托的使用. lambda可以隐式的转换成委托或者表达式树.转换成委托的话如下面的代码: Func<string ...

  5. 中缀表达式/后缀表达式/前缀表达式

    1:什么是中缀表达式,前缀表达式,后缀表达式? 正如我们常常潜意识认为我们所说的数字都是十进制,对于数字的其他进制感觉不正确一样,其实只是我们不熟悉而已,其他进制其实也不过就是一种对数据的表达方式而已 ...

  6. python赋值表达式_6. 表达式

    6.表达式¶ 本章将解释 Python 中组成表达式的各种元素的的含义. 语法注释: 在本章和后续章节中,会使用扩展 BNF 标注来描述语法而不是词法分析. 当(某种替代的)语法规则具有如下形式 na ...

  7. java后缀表达式_表达式计算 java 后缀表达式

    题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...

  8. c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...

    满意答案 sfuejr22 2016.01.13 采纳率:56%    等级:7 已帮助:659人 表达式: 表达式是操作符.操作数和标点符号组成的序列,其目的是用来说明-个计算过程. 表达式可以嵌套 ...

  9. [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

    [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...

最新文章

  1. arcgis下的python编程-基于ArcGIS的Python编程秘笈(第2版)
  2. oracle - emctl start dbconsole
  3. mysql中修改表的默认编码和表中字段的编码
  4. 【已解决】nimfa 环境的详细搭建过程 + 各种依赖库的安装、下载、调试
  5. PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性...
  6. 论文浅尝 - TACL2020 | 改进低资源跨语言实体链接的候选生成问题
  7. Delphi INI文件保存与读取
  8. 技嘉z77主板msata速度_功不可没的技嘉Z77主板_主板评测-中关村在线
  9. 学习Web前端技术,掌握JavaScript这门语言是必须的
  10. Serializing - 序列化 综述 – To be continued.
  11. 内联元素与内联块状元素
  12. Android实现在线阅读PDF文件
  13. 使用java实现数据库编程 第一章:数据库的设计
  14. 庄子(公元前369年-公元前286年)
  15. 李彦宏PK马云:后发制人与厚积博发
  16. 一台手机第一天支付1元,第二天支付2元,第三天支付4元,连续支付30天,请问一共需要支付多少钱?
  17. 标签类目体系(面向业务的数据资产设计方法论)-读书笔记4
  18. 获取某一年指定自然周的开始时间和结束时间
  19. excel解析html代码,使用excel vba解析HTML的错误
  20. 2019年互联网公司月饼颜值大比拼!

热门文章

  1. java调用其他方法中的变量_Uipath中调用Python的方法
  2. 对于初学者而言!如何处理 Python 入门难以进步的现象?
  3. VTK:选择可见点用法实战
  4. VTK:图像索贝尔Sobel用法实战
  5. boost::statechart模块实现触发事件测试
  6. 使用 Boost.MPI 的 reduce() 计算最小值的示例
  7. boost::mp11::mp_replace_third相关用法的测试程序
  8. boost::intrusive::list_member_hook用法的测试程序
  9. boost::hana::flip用法的测试程序
  10. boost::geometry::sectionalize用法的测试程序