![PHP从入门到精通(微视频精编版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/433/34752433/b_34752433.jpg)
第2章 PHP语言基础
(视频讲解:1小时44分钟)
通过第1章的学习,相信读者对PHP的概念和如何搭建PHP环境有了一个全面的了解,接下来将学习PHP的基础知识。无论是初出茅庐的“菜鸟”,还是资历深厚的“高手”,没有扎实的基础做后盾都是不行的。PHP的特点是易学、易用,但这并不代表随随便便就可以熟练掌握。随着知识的深入,PHP会越来越难学,基础的重要性也就越加明显。掌握了基础,就等于有了坚固的地基,才有可能“万丈高楼平地起”。
学习摘要:
PHP标记风格
PHP注释
PHP数据类型
PHP常量
PHP变量
PHP操作符
PHP表达式
PHP函数
2.1 PHP标记风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_1.jpg?sign=1739012541-XICNjYgqWLlZZbHA3iuyt1sFZKBL73dT-0-c15f6459fc31e69687e6659322461c1a)
视频讲解
PHP和其他几种Web语言一样,都是使用一对标记对将PHP代码部分包含起来,以便和HTML代码相区分。PHP一共支持4种标记风格,下面分别进行介绍。
1.XML风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_2.jpg?sign=1739012541-CudtzGC4OGJ4SVDJdlQPtRh2JNNT1G4S-0-f74c311ff90a834633e652b6c7402e0a)
XML风格的标记是本书所使用的标记,也是推荐使用的标记,服务器不能禁用。该风格的标记在XML、XHTML中都可以使用。
2.脚本风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_3.jpg?sign=1739012541-SdCrzTHFYxsGwlx93Gbla6Z5bvJijTAB-0-ff882947baccaf37f841946ea8000b61)
3.简短风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_4.jpg?sign=1739012541-2O7bAuGKGHMdckFicvLk3WMejoYuOyzk-0-d5b1ce8ea77dd580112939c5009f8343)
4.ASP风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_5.jpg?sign=1739012541-lLSOUcvd18Z8heln7ApX230Orrf4726c-0-11166d6429218ae66bbefa21b3de5ad3)
说明
如果要使用简短风格和ASP风格,需要在php.ini中对其进行配置,打开php.ini文件,将short_open_tag和asp_tags都设置为On,重启Apache服务器即可。
2.2 PHP注释的应用
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_6.jpg?sign=1739012541-DrYZQlSoSYJ6zKE9jVWbd9OOXirxswjz-0-af81d868b680187ff5f4b9cefb2a020f)
视频讲解
注释即代码的解释和说明,一般放到代码的上方或代码的尾部(放尾部时,代码和注释之间以Tab键进行分隔,以方便程序阅读),用来说明代码或函数的编写人、用途、时间等。注释不会影响到程序的执行,因为在执行时,注释部分会被解释器忽略不计。
PHP支持3种风格的程序注释。
1.单行注释(//)
这是一种来源于C++语法的注释模式,可以写在PHP语句的上方,也可以写在后方。
写在PHP语句上方:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_1.jpg?sign=1739012541-nRjNU0zGl813W8MeTKtk9sWWLysNFuij-0-e02ccf89eacbc9932c32afcbab793ea1)
写在PHP语句后方:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_2.jpg?sign=1739012541-85sEQEz7nIWjBa5rtcZ4vDKe271zf053-0-c520ad877156fc81df2fc02c2660b9a6)
2.多行注释()
这是一种来源于C语言语法的注释模式,可以分为块注释和文档注释。
块注释:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_3.jpg?sign=1739012541-7vViXstGXndZPgVlmAJ9Byl0QlVdw3et-0-eceea52378329ac7b69bd506dd072fff)
文档注释:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_4.jpg?sign=1739012541-dy4vye6uHSgDfypRFOf3KwV57F8qYy90-0-6cd422001d22f8736a9025879d6ee1e4)
注意
多行注释是不允许进行嵌套操作的。
3.#号风格的注释(#)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_2.jpg?sign=1739012541-y82O8qKKpgJeJNkB8YJnAWvBYdIU2Hl4-0-36fa200a19e54089e32c27f8bd38aa46)
注意
在单行注释中的内容不要出现“?>”标志,因为解释器会认为PHP脚本结束,而不去执行“?>”后面的代码。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_3.jpg?sign=1739012541-WnOFuG4M4STslASfnmKvBVJdYZXyxOrf-0-8f1b948e8551d6712433a5d7797d54c3)
运行结果如下:
这样会出错的!!!!!不会看到?>
2.3 PHP的数据类型
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_4.jpg?sign=1739012541-b66VNqML51rJUs0imins3N35IwpAKfla-0-093a28b1e091b7c95bf1db0366410cec)
视频讲解
2.3.1 数据类型
PHP一共支持8种原始类型,包括4种标量类型,即integer(整型)、float/double(浮点型)、string(字符串型)和boolean(布尔型);两种复合类型,即array(数组)和object(对象);两种特殊类型,即resource(资源)与NULL(空)。数据类型及说明如表2.1所示。
表2.1 数据类型
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T36_5.jpg?sign=1739012541-XykrO43qKT93zxHEGswPXsi7vqI7SNdb-0-fc699ee921f5f226352af790e7a9f6a2)
【例2.01】 使用echo语句输出个人信息,包括“姓名”“性别”“年龄”“身高”“体重”,代码如下:(实例位置:资源包\源码\02\2.01)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P37_2.jpg?sign=1739012541-UelLlORqOqsb2oknvVVRce7aWG1oWznX-0-0db99bc05488bd409805de9d0f092f97)
上述代码中,包含的数据类型有字符串型、整型和浮点型,运行结果如图2.1所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P37_3.jpg?sign=1739012541-9k2xhlzPySzHSixbQzhhmTjsCUccZzZO-0-0cc9ddfb3157aacf1fec03447fce014e)
图2.1 个人信息输出结果
多学两招
上述代码中,“.”是字符串连接符,<br>是换行标签,echo是PHP的输出语句,将文本内容显示在浏览器上。常用的输出语句还有var_dump()函数和print_r()函数。
2.3.2 数据类型转换
PHP是弱类型语言(或动态语言),不需要像C语言一样在使用变量前必须先声明变量的类型。在PHP中,变量的类型是由赋给它的值确定的。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P38_1.jpg?sign=1739012541-3OLL96dAAxOf3xIZNMQGlsaghJZSc1UN-0-caa5f97ccd6199be5e6d37acc4b0fedd)
说明
代码中“=”不是数学中的“等于”,它是赋值操作符,将“=”右边的值赋给“=”左边的变量。
上述代码中,变量$var1为字符串类型,变量$var2为整型。虽然PHP不需要先声明变量的类型,但有时仍然需要用到类型转换。PHP中的类型转换非常简单,只需在变量前加上用括号括起来的类型名称即可。允许转换的类型如表2.2所示。
表2.2 类型强制转换
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T38_2.jpg?sign=1739012541-K1qcYvmcXkISMN4rbUdderrMJ9Z8pAuD-0-d71486cfbbd349264812479ecfa60023)
注意
在进行类型转换的过程中应该注意以下内容:转换成布尔型时,null、0和未赋值的变量或数组会被转换为false,其他的为true;转换成整型时,布尔型的false转换为0,true转换为1,浮点型的小数部分被舍去,字符串型如果以数字开头就截取到非数字位,否则输出0。
类型转换还可以通过settype()函数来完成,该函数可以将指定的变量转换成指定的数据类型。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P38_3.jpg?sign=1739012541-bhUE1COvTBN7EOvB55uiNLML9db3YRbu-0-d1ee40c646e71dc4075fe8623be6caa1)
参数var为指定的变量,参数type为指定的类型,参数type有7个可选值,即boolean、float、integer、array、null、object和string。如果转换成功,则返回true,否则返回false。
当字符串转换为整型或浮点型时,如果字符串是以数字开头的,就会先把数字部分转换为整型,再舍去后面的字符串;如果数字中含有小数点,则会取到小数点前一位。
【例2.02】 使用两种方法将指定的字符串进行类型转换,并比较两种方法之间的不同。代码如下:(实例位置:资源包\源码\02\2.02)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P39_1.jpg?sign=1739012541-l72vUtn2CGLRHmxJ2BJ7YPHp3ucRxPbW-0-f572ccbe95f5aa19f1fd4c84f6f663d5)
运行结果如图2.2所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P39_2.jpg?sign=1739012541-CMPdWrPzdi3TtNyFX82g5uMGAm8eTDhd-0-fe18c8c664f9e6f7dd71a883612f6e2a)
图2.2类型转换
可以看到,使用(int)能直接输出转换后的变量类型,并且原变量不发生任何变化。而使用settype()函数返回的是布尔值,也就是true,而原变量被改变了。在实际应用中,可根据情况自行选择转换方式。
2.3.3 检测数据类型
PHP还内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型,如果符合则返回true,否则返回false。检测数据类型的函数如表2.3所示。
表2.3 检测数据类型
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T39_3.jpg?sign=1739012541-fZTzvOHs8PzBSTvgECT3n4aFJx99ZZdA-0-0a01ab17fe9c9e00de7deed2e41f2295)
由于检测数据类型的函数的功能和用法都是相同的,下面使用is_numeric()函数和is_null()函数来分别检测变量中的数据是否是数字和变量是否为null,从而了解并掌握is系列函数的用法。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_1.jpg?sign=1739012541-fe6uJxPDmur4j2LCEqY87im2eKGVBwpL-0-590857357acd9d91fcac55a4ca6dc66a)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_2.jpg?sign=1739012541-fxcTkYgovy7CsxHS1tTfdoEW7YFo3yng-0-b9fcfb110d3c8a0344717ad734cc9622)
2.4 PHP常量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_3.jpg?sign=1739012541-Guuh3cHamamP77RtkEDBhgqqzyC0wClG-0-211f1b3e8af41cafeda8c2abe9981547)
视频讲解
常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变,常量默认为大小写敏感。一个常量由英文字母、下画线和数字组成,但数字不能作为首字符出现。传统上常量标识符总是大写的。
2.4.1 定义常量
在PHP中使用define()函数来定义常量,该函数的语法格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_4.jpg?sign=1739012541-d9RwarzE9QE7Xp3HZd3cZJuPOHiBD01G-0-e1b00579b6ac31807ea3b11f1f0e9516)
参数说明如下。
constant_name:必选参数,常量名称,即标识符。
value:必选参数,常量的值。
case_sensitive:可选参数,指定是否大小写敏感。设定为true时,表示不敏感。
定义完常量后,使用常量名可以直接获取常量值。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_5.jpg?sign=1739012541-uh5WZ2JWqlzRhIdfTTTSXCLzWKUdDwZl-0-08ec7bccade98bc5186b905e4464fc1d)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P41_1.jpg?sign=1739012541-4RBO0mIakzvqN4xQJkKqcgxzmhe87g51-0-da418eb3a3fa9da1708201d7de2f587a)
2.4.2 预定义常量
在PHP开发过程中,开发者们经常会使用一些通用的信息,PHP已经将这些信息定义为常量,而不需要开发者重新定义,这就是预定义常量。常用的预定义常量如表2.4所示。
表2.4 PHP的预定义常量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T41_2.jpg?sign=1739012541-3acYi86Tef21aywonGqrFqyR6wTWDvtJ-0-240ebf80f0e5d225a7f4303d32c8c47a)
注意
__FILE__和__LINE__中的“__”是两条下画线,而不是一条“_”。
说明
表中以E_开头的预定义常量,是PHP的错误调试部分。如需详细了解,请参考error_ reporting()函数。
预定义常量与用户自定义常量在使用上没什么差别,直接获取常量值。例如,下面使用预定义常量输出PHP中的信息。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P41_3.jpg?sign=1739012541-KBHnPYtlbdrIs5NCet0Q63MXnjU6BBeW-0-6fddb2412752445f6e2996233b9ea623)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_1.jpg?sign=1739012541-ZsXIGmhioB0EKH96fdimJwyrNpJ2E0Mn-0-2ba1515a4c67d9c4687818073310575e)
说明
根据每个用户操作系统和软件版本的不同,所得的结果也不一定相同。
2.5 PHP变量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_2.jpg?sign=1739012541-A4Q3nn71RLJbIVzxx3Ax43K9aDhQKuzC-0-9a207fa44425978ed93a505cfc871568)
视频讲解
把一个值赋给一个名字时,如把值"明日科技小助手"赋给$name,$name就称为变量。在大多数编程语言中,都把这称为“把值存储在变量中”。在计算机内存中的某个位置,字符串序列"明日科技小助手" 已经存在。我们不需要准确地知道它们到底在哪里,只需要告诉PHP这个字符串序列的名字是$name,从现在开始就要通过这个名字来引用这个字符串序列。这个过程就像上门取快递一样,内存就像一个巨大的货物架,在PHP中使用变量就像是给快递盒子加标签,如图2.3所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_3.jpg?sign=1739012541-WHYMIDzOehzENqfKNaEw05ksnOWmUYB1-0-fff50c6fca7a87439f4a7d1e75415c99)
图2.3 货物架中贴着标签的快递
顾客的快递存放在货物架上,上面附着写有名字的标签。当顾客来取快递时,并不需要知道它们存放在这个大型货架的哪个具体位置,只需要提供名字,快递员就会把快递交送到顾客手上。实际上,顾客的快递可能并不在原先所放的位置,不过快递员会记录快递的位置。要取回顾客的快递,只需要提供顾客的名字。变量也一样,我们不需要准确地知道信息存储在内存中的哪个位置,只需要记住存储变量时所用的名字,直接使用这个名字即可。
2.5.1 变量赋值及使用
和很多语言不同,在PHP中使用变量之前不需要声明变量(PHP 4之前需要声明变量),只需为变量赋值即可。PHP中的变量名称用“$符号+标识符”表示。标识符由字母、数字或下画线组成,并且不能以数字开头。另外,变量名是区分大小写的。
变量赋值,是指给变量一个具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现。格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_1.jpg?sign=1739012541-tirqaWt4AHmTTNhLCgxMhTjtxJ32FO9V-0-41c5718f41d6495fb6c12d42acc13f4d)
对变量命名时,要遵循变量命名规则。例如,下面的变量命名是合法的:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_2.jpg?sign=1739012541-CRkfLD4xCAYbDjkZncTcEXleCtf8AUjY-0-40ccfe36410ac35831a15b9b0e54c22f)
下面的变量命名则是非法的:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_3.jpg?sign=1739012541-JpNliKJdckABAGy1eCmO2DWX6aTQi4Nf-0-8d4ab48ad3d95936e369fed2ee93531a)
除了直接赋值外,还有两种方式可以为变量赋值,一种是变量间的赋值。变量间的赋值是指赋值后两个变量使用各自的内存,互不干扰,代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_4.jpg?sign=1739012541-nzJTQIoufIuGTkwis9GP3zhKB6QoBg8q-0-d3b44b052742ca416b68bc23a8f22d64)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_5.jpg?sign=1739012541-XhNfxvWc0dGZc8ZaWe0c5oE5w2l2wVmX-0-53c7f5cf1290c81938a4c766e39cf2bf)
变量间的赋值就像是在网上买了一个商品后,一天后又下单买了相同的商品。这样在快递点就有两个一样的快递,这两个商品占用两个不同的货架位置,互不干扰。
另一种是引用赋值。从PHP 4开始,PHP引入了“引用赋值”的概念。引用的概念是,用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。使用&符号来表示引用。例如,变量$j是变量$i的引用,当给变量$i赋值后,$j的值也会跟着发生变化。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_6.jpg?sign=1739012541-dTJt2UjFCMnBhPk3R8wOXf7EjHcqkt5k-0-7f92034487ed7e7825a18b03171c7040)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P44_1.jpg?sign=1739012541-Swdq701elE5VoLqFigmXJJFxd63IhLco-0-3414f3c2abddeaae15d7324226b612f7)
引用赋值就像在填写快递信息时,为避免和别人重名被人误取,于是在“收货人”位置上写了两个名字,一个是真名,一个是笔名。尽管是两个名字,但却是同一个商品,占用同一个货架。
注意
引用赋值和变量间的赋值的区别在于:变量间的赋值是将原变量内容复制下来,开辟一个新的内存空间来保存,而引用赋值则是给变量的内容再起一个名字。
2.5.2 预定义变量
PHP还提供了很多非常实用的预定义变量,通过这些预定义变量可以获取到用户会话、用户操作系统的环境和本地操作系统的环境等信息。常用的预定义变量如表2.5所示。
表2.5 PHP的预定义变量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T44_2.jpg?sign=1739012541-JKT9i9tQ25dUkQdimhg6AeUkZ7hVUK1H-0-c85c3aeb1b69ec9ce140eb8c241a9212)
2.6 PHP操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P45_2.jpg?sign=1739012541-nOrM49FLCBKDCMiXyaaxnzRNIqZsWIa1-0-f2611dd34ba722bf0361ef94231d5c59)
视频讲解
“+”“-”“*”“/”都称为操作符。这是因为它们会“操作”或处理放在符号两边的数字。“=”也是一个操作符,称为赋值操作符,因为我们可以用它为一个变量赋值。操作符就是会对它两边的东西有影响或者有“操作”的符号。这种影响可能是赋值、检查或者改变一个或多个这样的东西。完成算术运算的“+”“-”“*”“/”都是操作符。PHP的操作符主要包括算术操作符、字符串操作符、赋值操作符、递增或递减操作符、逻辑操作符、比较操作符、条件操作符和位操作符,这里只介绍一些常用的操作符。
2.6.1 算术操作符
算术操作符是处理四则运算的符号,在数字的处理中应用得最多。PHP常用的算术操作符如表2.6所示。
表2.6 PHP常用的算术操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T45_3.jpg?sign=1739012541-gSyvaAoGzvArTGJUHUluavuowh4D4nDS-0-382b8a1c9f896ac0d9a4b53f583560de)
说明
在算术操作符中使用%求余,如果被除数($a)是负数,那么取得的结果也是一个负值。
【例2.03】 计算以80km/h的速度行驶200km需要花多长时间,答案为时/分的格式,如X小时Y分钟。相应的公式(用文字表述)是“行驶时间等于距离除以速度”。代码如下:(实例位置:资源包\源码\02\2.03)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_1.jpg?sign=1739012541-mIupfehlARfwARPoJmyPmJDL681yiuyO-0-bb077c880d334e1620e0466ff4bda2cc)
运行结果如图2.4所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_2.jpg?sign=1739012541-DyNk5nMseY5jLtqTeTYfZAaEabAjuNTv-0-18900e9ea96286f5069ad5e997472c4c)
图2.4 显示花费时间
2.6.2 字符串操作符
字符串操作符只有一个,即英文的句号“.”。它将两个字符串连接起来,结合成一个新的字符串。
例如,将"明日科技"和"有限公司"连接起来。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_3.jpg?sign=1739012541-YEWF4JRJj4Kuj5hb5EcSFdxLMJV88wl6-0-995943db16a299a22c3590be86e46c05)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_4.jpg?sign=1739012541-4wNDxLJpgBWAqDeiG2mQAav5Y54lN28v-0-f52220c434b5c617505537d767c6c147)
多学两招
对于字符串型数据,既可以用单引号,也可以用双引号。分别应用单引号和双引号来输出同一个变量,其输出结果完全不同,双引号输出的是变量的值,而单引号输出的是字符串"$i"。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_5.jpg?sign=1739012541-Za7wfDs1Qwze3jcayLyiRcBf0WIjLJQy-0-d06c3811eae92e3a560336875a935955)
2.6.3 赋值操作符
赋值操作符是把基本赋值操作符“=”右边的值赋给左边的变量或者常量。PHP的赋值操作符如表2.7所示。
表2.7 PHP的赋值操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T47_1.jpg?sign=1739012541-vuuMbIB8KnIcl8RZxESGzvJa7RsrQq5T-0-1c70840dcf026de1cef929515a797ae4)
注意
混淆“=”和“==”是编程中最常见的错误之一。
2.6.4 递增或递减操作符
两个加号“++”连接在一起,称为递增操作符。两个减号“--”连接在一起,称为递减操作符。递增或递减操作符有两种使用方法,一种是将操作符放在变量前面,即先将变量作加1或减1的运算后再将值赋给原变量,叫作前置递增或递减操作符,如图2.5所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P47_2.jpg?sign=1739012541-mI0saI8IbF8ELNlkxeqprPW9taQCLSV6-0-72899b6e8b623c7176554c366e77b777)
图2.5 前置递增操作符执行顺序
另一种是将操作符放在变量后面,即先返回变量的当前值,然后变量的当前值作加1或减1的运算,叫作后置递增或递减操作符,如图2.6所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P47_3.jpg?sign=1739012541-BAE3prIZZvA2kCh3C2IpeysadHQn13BI-0-9a67830c9a3a89bc57b32c331d4c0186)
图2.6 后置递增操作符执行顺序
例如,定义两个变量,将这两个变量分别利用递增和递减操作符进行操作,并输出结果。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P48_1.jpg?sign=1739012541-yZ3pH79IGim8JQUIL8rzNCOYHjM0fahS-0-6cd1f0db14262330abb166a7fe7c9248)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P48_2.jpg?sign=1739012541-tKsDWeE7heLbAoc5c4piAz9l8q5yRnRr-0-d0d86f7b20969455e6ea44eeaed9fc5d)
2.6.5 逻辑操作符
逻辑操作符用来组合逻辑运算的结果,是程序设计中一组非常重要的操作符。PHP的逻辑操作符如表2.8所示。
表2.8 PHP的逻辑操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T48_3.jpg?sign=1739012541-lmfK0sLfgZqiWayxXDTg5TgAUWunScMu-0-4842b03198cccdf0fd6ca4e3e216de12)
在逻辑判断时,经常要使用逻辑操作符,在后续章节中会使用到逻辑操作符。
2.6.6 比较操作符
比较操作符就是对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回true,如果为假,则返回false。PHP的比较操作符如表2.9所示。
表2.9 PHP的比较操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T49_1.jpg?sign=1739012541-ICR4MJ6pUx9Ntdfq0cyBVT7OxymPQxrl-0-9acfefb5b22bb7556b85ffd4750d36e6)
其中,不太常见的就是===和!==。$a===$b,说明$a和$b不只是数值上相等,而且两者的类型也一样。例如,false和0,在判断时,它们的关系是相等(==),但不是恒等(===)。
2.6.7 条件操作符(或三元操作符)
条件操作符(?:),也称为三元操作符,用于根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序中选择。条件操作符最好放在括号中使用。
例如,应用条件操作符实现一个简单的判断功能,如果正确则输出“条件运算”,否则输出“没有该值”。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P49_2.jpg?sign=1739012541-ZXjxjW06a2X4EoNdU44m7ytld4B6q5Ye-0-93d85bdbb1e6f47882eebf05f7f452a6)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P49_3.jpg?sign=1739012541-2IAupJzrVI2CE4adHIQQB1rgmsqQNF8Y-0-162252d2a6c46f449c1d831d3d29fb7c)
2.6.8 操作符的优先级
所谓操作符的优先级,是指在应用中哪一个操作符先计算,哪一个后计算,与数学的四则运算遵循的“先乘除,后加减”是一个道理。
PHP的操作符在运算中遵循的规则是:优先级高的运算先执行,优先级低的操作后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先进行。表2.10从高到低列出了操作符的优先级。同一行中的操作符具有相同优先级,此时它们的结合方向决定求值顺序。
表2.10 操作符的优先级
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T50_1.jpg?sign=1739012541-st9eMgb9whcmSxGCyFRX3V4ZIpNOXepA-0-c1026e7284d294097e63d41edc66e47a)
这么多的级别,如果想都记住是不太现实的,也没有必要。如果写的表达式很复杂,而且包含了较多的操作符,不妨多使用括号,例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P50_2.jpg?sign=1739012541-lDDCcSpJPvEx3YKB6OEFilRu0MuRIe0C-0-3b0fed5f9c808b4bbf3f19f4c944b21d)
这样就会减少出现逻辑错误的可能。
2.7 PHP的表达式
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P50_3.jpg?sign=1739012541-gAFTSuranRDt2v6fukcjilvM0CZ846DB-0-252123dc46cdccc846200a4e7fbe817d)
视频讲解
表达式是构成PHP程序语言的基本元素,也是PHP最重要的组成元素。最基本的表达式形式是常量和变量。例如,$m=20,即表示将值20赋给变量$m。表达式是PHP最重要的基石。简单的表达式如以下代码所示:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_1.jpg?sign=1739012541-O9n369ZyeSDzIQYaqV8seAxuGTu8plLc-0-28ca27a047e27386d447407aed5e85b1)
上述代码是由两个表达式组成的脚本,即$num=12和$a="word"。此外,还可以进行连续赋值,例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_2.jpg?sign=1739012541-V3mlM0NvVAO4lJ8UDtDAf5mYPpkLEIJP-0-0dee3b016515febc23b8f90fc745613c)
因为PHP赋值操作的顺序是由右到左的,所以变量$b和$a都被赋值5。
在PHP的代码中,使用分号“;”来区分表达式,表达式也可以包含在括号内。可以这样理解:一个表达式再加上一个分号,就是一条PHP语句。
注意
在编写程序时,应该注意表达式后面的分号“;”不要漏写。
2.8 PHP函数
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_3.jpg?sign=1739012541-EgmfjxNrpmHW2hLNYvoRURUKa2HbXFD8-0-9854d2e4b90135016b9e02ea700cd72a)
视频讲解
函数就是可以完成某个工作的代码块,它就像是小朋友搭房子用的积木一样,可以反复地使用。在使用时,只需拿来即用,而不用考虑它的内部组成。PHP函数可以分为两类,一类是内置函数,即PHP自身函数,只需要根据函数名调用即可。PHP备受欢迎的一个原因就是拥有大量的内置函数,包括字符串操作函数和数组操作函数等。例如,var_dump()函数就是输出变量的函数。第二类是自定义函数,就是由用户自己定义的,用来实现特定功能的函数。内置函数可以通过查阅PHP开发手册来学习,下面讲解自定义函数。
2.8.1 定义和调用函数
创建函数的基本语法格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_4.jpg?sign=1739012541-dsJ0LqWHQP0d9zgG1QfJ7UCCIqPokHJo-0-6ffa3173956956a19e7636c7c70096f2)
参数说明如下。
function:为声明自定义函数时必须使用到的关键字。
fun_name:为自定义函数的名称。
$str1…$strn:为函数的参数。
fun_body:为自定义函数的主体,是功能实现部分。
当函数被定义好后,所要做的就是调用这个函数。调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用。
例如,定义了一个函数example(),计算传入的参数的平方,然后连同表达式和结果全部输出。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_1.jpg?sign=1739012541-YpRmmQEsimW0rG0Y9zxu40Dtc4ZKnyeT-0-916a2b3b3e48972d629afd59a678e95d)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_2.jpg?sign=1739012541-xSPVEHxnVDqjqgo2qVHRofbm5j6j2kxU-0-d1122738e1ecba2adae21e1aca396ad3)
注意
如果定义了一个函数,但是从未调用这个函数,那么,这些代码将永远也不会执行。
2.8.2 在函数间传递参数
在调用函数时,有时需要向函数传递参数,如图2.7所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_3.jpg?sign=1739012541-q2Q9r1Iial4pwbqIvfshLpaWe3kGIlKQ-0-e637f819d994ab6b629b533930e1c556)
图2.7 函数传递参数
参数传递的方式有按值传递、按引用传递和默认参数3种。
1.按值传递方式
按值传递方式是最常用的参数传递方式,即将调用者括号内的值依次传递给函数括号内的值。从下面的例子中,验证函数接收参数的顺序。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_1.jpg?sign=1739012541-W7Ok5GzqX2YVpXhcdY8GYVLAMryjKwnV-0-5b264ae4ec3caeb01ed7a210757905d6)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_2.jpg?sign=1739012541-jpUW0O9MwzLbSmEFosJ2sHB76HwWj5B4-0-c1c09dfd6b0e5b127c1213b10bfccd8d)
2.按引用传递方式
按引用传递就是将参数的内存地址传递到函数中。这时,在函数内部的所有操作都会影响到调用者参数的值。引用传递方式就是传值时在原基础上加&号即可。
举例说明按值传递和按引用传递的区别。
按值传递:张三和李四是同事,张三有一间独立的办公室,张三给李四建筑材料,李四也建造了一个跟张三一模一样的办公室,他们俩在各自办公室办公,彼此独立。
按引用传递:由于公司工费紧张,将李四安排到张三的办公室。二人各有一把钥匙,共用办公室的资源,张三和李四就会相互影响。
例如,下面的代码中,在第一个参数前添加一个&号。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_3.jpg?sign=1739012541-U0mcF0NJs4vYZ7RtcnBRNp63MDTmhD9f-0-7819892bd799939b6389020de4593f48)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P54_1.jpg?sign=1739012541-oYBkou09Dc9ewQpIODUdHW7T9XlecKln-0-60ea03ef8951e4f851d77f967d017adc)
从运行结果可以看出,第一个参数$parameter1使用引用后,函数体内改变$parameter1的值,调用者的参数$number1也相应改变,而$number2和$number3的值则没有改变。
3.默认参数(可选参数)
还有一种设置参数的方式,即可选参数。可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并且给它指定一个默认值。
例如,使用可选参数实现一个简单的价格计算功能,设置自定义函数values()的参数$tax为可选参数,其默认值为0。第一次调用该函数,并且给参数$tax赋值0.25,输出价格;第二次调用该函数,不给参数$tax赋值,输出价格。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P54_2.jpg?sign=1739012541-9AO9zLgL7oxzOOL5croQlFlEWoDAHTE9-0-81a387aa510aa4289f44355d1c8fa2ee)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P54_3.jpg?sign=1739012541-csDoCVu7tS3ADIfKGBfAADAzezsllk1N-0-95decf4f5b33a23872111d1c78fdbf57)
注意
当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。
2.8.3 从函数中返回值
我们已经知道,可以向函数发送信息(参数),不过函数还可以向调用者发回信息。从函数返回的值称为结果(result)或返回值(return value)。函数将返回值传递给调用者的方式是使用关键字return。return将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。该过程如图2.8所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P55_1.jpg?sign=1739012541-qcgxdM1lsMuduSidQQ4HkuDCmIluYQN1-0-8a3822f10ceacf4084f700be26a218dc)
图2.8 函数返回值
【例2.04】 模拟淘宝购物车功能,并计算购物车中商品总价。购物车中有如下商品信息:苹果手机单价5000元,购买数量2台;联想笔记本电脑单机8000元,购买数量10台。操作步骤为:先定义一个函数,命名为total,该函数的作用是输入物品的单价和数量,然后计算总金额,最后返回商品金额。代码如下:(实例位置:资源包\源码\02\2.04)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P55_2.jpg?sign=1739012541-nuQWwgHMvv2hWroxJWfRXD8XB38F5sNL-0-5c3776a383e69458e50b1761e65f13dc)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P55_3.jpg?sign=1739012541-BQuzGXBk0j04nLJGl93hwwVLvhMAS7E7-0-a48e2b812c4a123d3c4468e663495407)
return语句只能返回一个参数,即只能返回一个值,不能一次返回多个。如果要返回多个结果,就要在函数中定义一个数组,将返回值存储在数组中返回。
2.8.4 变量作用域
细心的读者可能注意到,有些变量在函数之外,有些则在函数之内,它们必须在有效范围内使用,如果变量超出有效范围,则变量也就失去其意义了。变量的作用域如表2.11所示。
表2.11 变量作用域
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T55_4.jpg?sign=1739012541-Cw1QolRcvv79qYa5OWFTKuagfNvDDgT4-0-cfb0eab2d84acc7782509bd4ac0da6ff)
在函数内部定义的变量,其作用域为所在函数,如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。
2.9 小结
本章主要介绍了PHP语言的基础知识,包括数据类型、常量、变量、操作符、表达式和自定义函数,并详细介绍了各种类型之间的转换、系统预定义的常量和变量、操作符优先级和如何使用函数。基础知识是一门语言的核心,希望初学者能静下心来,牢牢掌握本章的知识,这样对以后的学习和发展能起到事半功倍的效果。
2.10 实战
2.10.1 输出圆周率的近似值
实例位置:资源包\源码\02\实战\01
使用3种书写方法(圆周率函数、传统书写格式和科学记数法)输出圆周率的近似值,运行结果如图2.9所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P56_1.jpg?sign=1739012541-SIk3BYQsPEY8nNZmXx07ELVudrbmqobZ-0-665081258cb6dccc2af185186fa94b2a)
图2.9 3种方法显示圆周率
2.10.2 将华氏温度转化为摄氏温度
实例位置:资源包\源码\02\实战\02
美国洛杉矶当前温度为72华氏温度(F),把温度从华氏度转换为摄氏度(C)。转换公式是C=5/9×(F–32)。运行结果如图2.10所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P56_2.jpg?sign=1739012541-Dv3yqJU1AO0lZfIv3QRGLic5tMZK8FKy-0-6706cd6d37e24fab368d034ab66592f6)
图2.10 将华氏温度转化为摄氏温度