PHP基础-表达式介绍
表达式是 PHP 最重要的基石。在PHP 编程
中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是“任何有值的东西”。
最基本的表达式形式是常量和变量。当键入“$a = 5”,即将值“5”分配给变量 $a。“5”,很明显,其值为 5,换句话说“5”是一个值为 5 的表达式(在这里,“5”是一个整型常量)。
赋值之后,所期待情况是 $a 的值为 5,因而如果写下 $b = $a,期望的是它犹如 $b = 5 一样。换句话说,$a 也是一个值为 5 的表达式。如果一切运行正确,那这正是将要发生的正确结果。
稍微复杂的表达式例子就是函数。例如,考虑下面的函数:
function foo ()
{
return 5;
}
?>
假定已经熟悉了函数的概念,那么键入 $c = foo() 从本质上来说就如写下 $c = 5,这没错。函数也是表达式,表达式的值即为它们的返回值。既然 foo() 返回 5,表达式“foo()”的值也是 5。通常函数不会仅仅返回一个静态值,而可能会计算一些东西。
当然,PHP 中的值常常并非是整型的。PHP 支持四种标量值(标量值不能拆分为更小的单元,例如和数组不同)类型:整型值(integer),浮点数值(float),字符串值(string)和布尔值(boolean)。PHP 也支持两种复合类型:数组和对象。这两种类型具可以赋值给变量或者从函数返回。
PHP 和其它语言一样在表达式的道路上发展,但推进得更深远。PHP 是一种面向表达式的语言,从这一方面来讲几乎一切都是表达式。考虑刚才已经研究过的例子,“$a = 5”。很显然这里涉及到两个值,整型常量“5”的值以及变量 $a 的值,它也被更新为 5。但是事实是这里还涉及到一个额外的值,即附值语句本身的值。赋值语句本身求值为被赋的值,即 5。实际上这意味着“$a = 5”,不必管它是做什么的,是一个值为 5 的表达式。因而,这样写“$b = ($a = 5)”和这样写“$a = 5; $b = 5”(分号标志着语句的结束)是一样的。因为赋值操作的顺序是由右到左的,也可以这么写“$b = $a = 5”。
另外一个很好的面向表达式的例子就是前、后递增和递减。PHP 和多数其它语言的用户应该比较熟悉 variable++ 和 variable-- 符号。即递增和递减运算符。在 PHP 中,和 C 语言一样,有两种类型的递增——前递增和后递增,本质上来讲,前递增和后递增均增加了变量的值,并且对于变量的影响是相同的,不同的是递增表达式的值。前递增,写做“++$variable”,求增加后的值(PHP 在读取变量的值之前,增加变量的值,因而称之为“前递增”)。后递增,写做“$variable++”,求变量未递增之前的原始值(PHP 在读取变量的值之后,增加变量的值,因而叫做“后递增”)。
一个常用到表达式类型是比较表达式。这些表达式求值为 FALSE 或 TRUE。PHP 支持 >(大于),>=(大于等于),==(等于),!=(不等于),<(小于)和 <=(小于等于)。PHP 还支持全等运算符 ===(值和类型均相同)和非全等运算符 !==(值或者类型不同)。这些表达式都常用于条件判断语句中,比如,if 语句。
这里,将要研究的最后一个例子是组合的运算赋值表达式。已经知道如果想要为变量 $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 -= 5”(从变量 $a 的值中减去 5),“$b *= 7”(变量 $b 乘以 7),等等。
还有一个表达式,如果没有在别的语言中看到过的话,可能看上去很奇怪,即三元条件运算符:
$first ? $second : $third
?>
如果第一个子表达式的值是TRUE(非零),那么第二个子表达式被求值,其值即为整个条件表达式的值。否则,第三个子表达式将被求值并且其值成为整个表达式的值。
下面的例子一般来说应该有助于理解前、后递增和表达式:
function double($i)
{
return $i*2;
}
$b = $a = 5; /* assign the value five intothe variable $a and $b */
$c = $a++; /* post-increment, assignoriginal value of $a
(5) to $c */
$e = $d = ++$b; /* pre-increment, assignthe incremented value of
$b (6) to $d and $e */
/* at this point, both $d and $e are equalto 6 */
$f = double($d++); /* assign twice thevalue of $d before
the increment, 2*6 = 12 to $f */
$g = double(++$e); /* assign twice thevalue of $e after
the increment, 2*7 = 14 to $g */
$h = $g += 10; /* first, $g is incrementedby 10 and ends with the
value of 24. the value of the assignment(24) is
then assigned into $h, and $h ends with thevalue
of 24 as well. */
?>
一些表达式可以被当成语句。这时,一条语句的形式是 expr ;,即一个表达式加一个分号结尾。在 '$b = $a = 5;' 中,'$a = 5' 是一个有效的表达式,但它本身不是一条语句。而 '$b = $a = 5;' 则是一条有效的语句。
最后一件值得提起的事情就是表达式的真值。在许多事件中,大体上主要是在条件执行和循环中,并不关心表达式中具体的值,而是只关心表达式的值是否是 TRUE 或者FALSE。常量 TRUE 和FALSE(大小写无关)是两种可能的布尔值。在必要时,一个表达式将自动转换为布尔值。
PHP基础-表达式介绍的更多相关文章
- Linq学习系列-----1.1 Lambda表达式介绍
1.1 Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...
- c/c++ lambda 表达式 介绍
lambda 表达式 介绍 问题:假设有个需求是,在vector<string>找出所有长度大于等于4的元素.标准库find_if函数的第三参数是函数指针,但是这个函数指针指向的函数只能接 ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- SVN CentOS7 下配置svn的安装及基础配置介绍
CentOS7 下配置svn的安装及基础配置介绍 by:授客 QQ:1033553122 目录 一. 二. 三. 四. 五. 六. 七. 一. 实践环境 CentOS 7操作系统(CentO ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Nginx基础知识介绍
Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...
- TCP_Wrappers基础知识介绍
1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...
- 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍
第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...
- Spring Aop(三)——Pointcut表达式介绍
转发地址:https://www.iteye.com/blog/elim-2395255 3 Pointcut表达式介绍 3.1 表达式类型 标准的Aspectj Aop的pointcut的表达式类型 ...
随机推荐
- magento下载地址
https://download.magentochina.org/magento/2/ https://www.magentochina.org/blog/download-install-mage ...
- 微信小程序日历插件
1/ wxml代码 <view class="timePick"> <picker mode="date" fields="mo ...
- value(C# )
上下文关键字 value 用在普通属性声明的 set 访问器中. 此关键字类似于方法的输入参数. 关键字 value 引用客户端代码尝试分配给属性的值. 在以下示例中,MyDerivedClass 有 ...
- IDEA 双击只选择了一个变量的某部分单词
1,很多抄袭文章说 在keymap 里搜索 select Word at caret , 鄙视手动抄袭和编写爬虫来 作恶的开发者. 2,自己试了,File菜单 ----> settings- ...
- windows jenkins 发布 springboot项目脚本
windows jenkins 发布 springboot项目脚本 1.关闭现有程序 (按端口关闭) [与按应用关闭 二选一] @echo off for /f "tokens=1-5&q ...
- SQL中前置0和后置0的处理问题
在sql语句中经常遇到处理前置和后置数据的问题 1.首先使用convert转化函数对预处理的数据进行转化,CONVERT()函数可以将制定的数据类型转换为另一种数据类型 MySQL 的CAST()和C ...
- Linux命令基础#1
系统基础 三大部件:CPU 内存 IO 1.CPU :运算器 控制器 存储器 2.内存:CPU的数据只能从内存读取,且内存数据有易失性(页面) 3.IO:控制总线 数据总线(一个IO) OS原理: O ...
- 使用Idea部署SSM项目后,访问路径为url:8080/项目名_war_exploded的解决方案
在tomcat配置页的Deployment下,修改Application context为/,即可直接使用url:8080访问项目主页.
- 史上最全的大厂Mysql面试题在这里
1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 从:io线程——在使用star ...
- Chrome之谷歌插件开发
最近碰到一个需求,需要在某个平台上批量的添加好友,如果是人工点击,可以操作,但是效率并不高,人工成本较高.就打算使用浏览器插件的方式来完成这件重复性的工作. 介绍: Chrome插件的本质就是一个由 ...