![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=1739304010-6xEES7YgWW5dDZUMWRK6bZMPIyCyPdyQ-0-b57396069ce7f885f00a3b768795e7ff)
视频讲解
PHP和其他几种Web语言一样,都是使用一对标记对将PHP代码部分包含起来,以便和HTML代码相区分。PHP一共支持4种标记风格,下面分别进行介绍。
1.XML风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_2.jpg?sign=1739304010-WXV6Tx3zwAHL7i0wwM7E4h6TgIb7XSJq-0-a292678932d43bc22f581928695b08ff)
XML风格的标记是本书所使用的标记,也是推荐使用的标记,服务器不能禁用。该风格的标记在XML、XHTML中都可以使用。
2.脚本风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_3.jpg?sign=1739304010-bhlBWrSHTDrJNFqQ5p0bylXmAwAgXrF7-0-4b7fe28201c46134ef927f662c043252)
3.简短风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_4.jpg?sign=1739304010-FKSLqxNgvQlYh1vmRNY6SzCKY3SOjZt0-0-0feceed970fd3c4855edce9b99191688)
4.ASP风格
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P34_5.jpg?sign=1739304010-Q9sgO29ahw8lRfrWYMhRCuFTvwoWwH3B-0-e67a0fb0f1f8f5febdba047571831d0f)
说明
如果要使用简短风格和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=1739304010-cKCa7U54ZXQkeCusZP4RakH6Ww2HIX7G-0-08c571e914cac788b850ce783d7e705c)
视频讲解
注释即代码的解释和说明,一般放到代码的上方或代码的尾部(放尾部时,代码和注释之间以Tab键进行分隔,以方便程序阅读),用来说明代码或函数的编写人、用途、时间等。注释不会影响到程序的执行,因为在执行时,注释部分会被解释器忽略不计。
PHP支持3种风格的程序注释。
1.单行注释(//)
这是一种来源于C++语法的注释模式,可以写在PHP语句的上方,也可以写在后方。
写在PHP语句上方:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_1.jpg?sign=1739304010-CD8uUyNoIBhMwZmY5bIgoPABJaFibIbO-0-210ac3d10d1b28a30f9128867f44c5a2)
写在PHP语句后方:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_2.jpg?sign=1739304010-skt2MU5UUcrVeJNz6fgaLJ5nLaWIi0vR-0-ce5a6d4490fdac94dd3dc4ab2fbbb849)
2.多行注释()
这是一种来源于C语言语法的注释模式,可以分为块注释和文档注释。
块注释:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_3.jpg?sign=1739304010-ahuudbPpCZPPqS0k6Vwbbx7jdPLNhNqh-0-7e40db8275ecd57a1107b313ff0c768e)
文档注释:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P35_4.jpg?sign=1739304010-QBqnAsexlYYvPleFM2JpVbs4rJ3KrKZC-0-56747283c30434619c4c6da87ceef410)
注意
多行注释是不允许进行嵌套操作的。
3.#号风格的注释(#)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_2.jpg?sign=1739304010-CEpf1fvCMRScqNnVo7SmAfV3Ww9yPXxL-0-3b49f19ccfc7926b3c8d09711ab14233)
注意
在单行注释中的内容不要出现“?>”标志,因为解释器会认为PHP脚本结束,而不去执行“?>”后面的代码。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_3.jpg?sign=1739304010-MMbHyrNKiFaBdUYMrCdNrXRztYk4VirX-0-5c652c461e4fbf87261bf2ea2bb91a9c)
运行结果如下:
这样会出错的!!!!!不会看到?>
2.3 PHP的数据类型
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P36_4.jpg?sign=1739304010-l1zCUc1hyDmK5sV0KP5H8eGv5DDzVz1f-0-b1a01b6d835a0569f7b912b83339b294)
视频讲解
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=1739304010-ildlmVyc1wAUZrzQUaFu0CgQidCcLzA8-0-59a6110891ec634b4d2e42e8a76df823)
【例2.01】 使用echo语句输出个人信息,包括“姓名”“性别”“年龄”“身高”“体重”,代码如下:(实例位置:资源包\源码\02\2.01)
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P37_2.jpg?sign=1739304010-adHvb48GhPb01KU7zVsICd2pAIPQLfnC-0-74e5e86c804a6116bec5dd7b72bd568b)
上述代码中,包含的数据类型有字符串型、整型和浮点型,运行结果如图2.1所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P37_3.jpg?sign=1739304010-w3Cg3zJyUs6kQLmR8fgGWRrPmSBpfwD8-0-aa63b710c989c89d5b69cf6ad44ee501)
图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=1739304010-JIeqtKMeoFkwh9KXnri9Eb6es29uIU8y-0-112beafcfe873b354642fd4c8fc33bd2)
说明
代码中“=”不是数学中的“等于”,它是赋值操作符,将“=”右边的值赋给“=”左边的变量。
上述代码中,变量$var1为字符串类型,变量$var2为整型。虽然PHP不需要先声明变量的类型,但有时仍然需要用到类型转换。PHP中的类型转换非常简单,只需在变量前加上用括号括起来的类型名称即可。允许转换的类型如表2.2所示。
表2.2 类型强制转换
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T38_2.jpg?sign=1739304010-mgEZjzm5xAi4OOI78Epq3Nk8QVN4VkZJ-0-840cd3634fa828390636310a52fde47d)
注意
在进行类型转换的过程中应该注意以下内容:转换成布尔型时,null、0和未赋值的变量或数组会被转换为false,其他的为true;转换成整型时,布尔型的false转换为0,true转换为1,浮点型的小数部分被舍去,字符串型如果以数字开头就截取到非数字位,否则输出0。
类型转换还可以通过settype()函数来完成,该函数可以将指定的变量转换成指定的数据类型。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P38_3.jpg?sign=1739304010-FMp7bOFjKW0Uv6rKDHIQmWFJgUmHUC1D-0-12670165dcd325ec8e48cdf6dcbd6bf9)
参数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=1739304010-eDPeECp4J94tjFs80v1TAD4Od2bLfSW1-0-c9e77217385dec9055cf8c100dc1dabb)
运行结果如图2.2所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P39_2.jpg?sign=1739304010-25EAN8LsdHvP13EWDsRGVfEhBcIpIeyF-0-4b1b56c10195e24c9d6e7854cc083d94)
图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=1739304010-5TeJs9igIbbb6Uc2Yv1ZRDaoebBXetmp-0-ce71903542a26c7c878c90412ec65c04)
由于检测数据类型的函数的功能和用法都是相同的,下面使用is_numeric()函数和is_null()函数来分别检测变量中的数据是否是数字和变量是否为null,从而了解并掌握is系列函数的用法。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_1.jpg?sign=1739304010-KKCIImEunPT2uSU3yzHbeGGHvscjs7HS-0-48dba937d8f88039d8891531ade3ced5)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_2.jpg?sign=1739304010-99vi0gDsz9Hlv5cYaQLTfVmcaQ1FK3sR-0-e34a04b37f60e3a0b9d8c61b1620e4c7)
2.4 PHP常量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_3.jpg?sign=1739304010-yIRCvWezaQbNyUYYwxrKsaHvHkvEjXW6-0-de6e7a614e3e2f0126fb9dc74cd4c355)
视频讲解
常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变,常量默认为大小写敏感。一个常量由英文字母、下画线和数字组成,但数字不能作为首字符出现。传统上常量标识符总是大写的。
2.4.1 定义常量
在PHP中使用define()函数来定义常量,该函数的语法格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_4.jpg?sign=1739304010-mx1h77LiExSgv5LoiF6h8qTt0L4FMcRp-0-79b2b687f79fb812cf0ce0c670b694ba)
参数说明如下。
constant_name:必选参数,常量名称,即标识符。
value:必选参数,常量的值。
case_sensitive:可选参数,指定是否大小写敏感。设定为true时,表示不敏感。
定义完常量后,使用常量名可以直接获取常量值。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P40_5.jpg?sign=1739304010-MKVUVtIxbwua4xcIyWjtCqjjjGh00RbW-0-6ad458c76d52fca6e44833476c83b3c6)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P41_1.jpg?sign=1739304010-xuGkHwm8fWRBTjoLpkGV2foEMbdtgcZw-0-da2731b14945e744922b09c6cac4f43f)
2.4.2 预定义常量
在PHP开发过程中,开发者们经常会使用一些通用的信息,PHP已经将这些信息定义为常量,而不需要开发者重新定义,这就是预定义常量。常用的预定义常量如表2.4所示。
表2.4 PHP的预定义常量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T41_2.jpg?sign=1739304010-LGYxVCK4xx2z5pD5hOfBOKbtmfuLOVbN-0-478cf20d4042b9110d88d0aa9a5457bb)
注意
__FILE__和__LINE__中的“__”是两条下画线,而不是一条“_”。
说明
表中以E_开头的预定义常量,是PHP的错误调试部分。如需详细了解,请参考error_ reporting()函数。
预定义常量与用户自定义常量在使用上没什么差别,直接获取常量值。例如,下面使用预定义常量输出PHP中的信息。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P41_3.jpg?sign=1739304010-GYhlK34eHXr0HmVFWZVdd7u3yv8OLboj-0-77c199b147ca2ce40a16af96e980713b)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_1.jpg?sign=1739304010-VvAaA4xnsEMqE3FKlV10fnO5Ru0XafiM-0-ee29a759ada0044defc6a36e3e837858)
说明
根据每个用户操作系统和软件版本的不同,所得的结果也不一定相同。
2.5 PHP变量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_2.jpg?sign=1739304010-iBkxdnxOVykcexOE7ZlSthCqnMjYGjHs-0-73c61a3aa2dfeea86894e05ad2d5246f)
视频讲解
把一个值赋给一个名字时,如把值"明日科技小助手"赋给$name,$name就称为变量。在大多数编程语言中,都把这称为“把值存储在变量中”。在计算机内存中的某个位置,字符串序列"明日科技小助手" 已经存在。我们不需要准确地知道它们到底在哪里,只需要告诉PHP这个字符串序列的名字是$name,从现在开始就要通过这个名字来引用这个字符串序列。这个过程就像上门取快递一样,内存就像一个巨大的货物架,在PHP中使用变量就像是给快递盒子加标签,如图2.3所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P42_3.jpg?sign=1739304010-QDXPXmfCWOMEPSvIp3TxQtzBMU30f3O0-0-a5d1a290dcb3ef4fd4eae4f8e0eb2ad0)
图2.3 货物架中贴着标签的快递
顾客的快递存放在货物架上,上面附着写有名字的标签。当顾客来取快递时,并不需要知道它们存放在这个大型货架的哪个具体位置,只需要提供名字,快递员就会把快递交送到顾客手上。实际上,顾客的快递可能并不在原先所放的位置,不过快递员会记录快递的位置。要取回顾客的快递,只需要提供顾客的名字。变量也一样,我们不需要准确地知道信息存储在内存中的哪个位置,只需要记住存储变量时所用的名字,直接使用这个名字即可。
2.5.1 变量赋值及使用
和很多语言不同,在PHP中使用变量之前不需要声明变量(PHP 4之前需要声明变量),只需为变量赋值即可。PHP中的变量名称用“$符号+标识符”表示。标识符由字母、数字或下画线组成,并且不能以数字开头。另外,变量名是区分大小写的。
变量赋值,是指给变量一个具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现。格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_1.jpg?sign=1739304010-ZBYMeQm8fhRnAPNG0LnXYoPZj5stG36B-0-dae3a2946ff0b15a019fe680242d7f8f)
对变量命名时,要遵循变量命名规则。例如,下面的变量命名是合法的:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_2.jpg?sign=1739304010-8R3ImkLbtsIH06Xp5AyN1EZwXVkejS3L-0-22f0c7cee9502537085b1c5f9ff8267e)
下面的变量命名则是非法的:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_3.jpg?sign=1739304010-vqKlfJrwZuBvSHup8Nqb0WnhWO7k0yjJ-0-94df204bba0d907e13210e607920c88e)
除了直接赋值外,还有两种方式可以为变量赋值,一种是变量间的赋值。变量间的赋值是指赋值后两个变量使用各自的内存,互不干扰,代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_4.jpg?sign=1739304010-BlUa0VhH1yngIMyYvNvpcTgybJfbt8eL-0-256b0c728da3cddb6c6ae668936b7d4e)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_5.jpg?sign=1739304010-FfEQVwmkz9zsTMPfGmoRS672xPv5ksRo-0-f209edbdd90c6175321313c4f958f50c)
变量间的赋值就像是在网上买了一个商品后,一天后又下单买了相同的商品。这样在快递点就有两个一样的快递,这两个商品占用两个不同的货架位置,互不干扰。
另一种是引用赋值。从PHP 4开始,PHP引入了“引用赋值”的概念。引用的概念是,用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。使用&符号来表示引用。例如,变量$j是变量$i的引用,当给变量$i赋值后,$j的值也会跟着发生变化。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P43_6.jpg?sign=1739304010-bkD29ndSayz4K5hB6bjxjJLxP3BXpNG1-0-1d8ba9007e705b69b62fe3c843eef274)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P44_1.jpg?sign=1739304010-OAZx4vox4oXbPRFBrZVp87fS5elu5PuG-0-c000e63464b140d338d0ac498f9cff2d)
引用赋值就像在填写快递信息时,为避免和别人重名被人误取,于是在“收货人”位置上写了两个名字,一个是真名,一个是笔名。尽管是两个名字,但却是同一个商品,占用同一个货架。
注意
引用赋值和变量间的赋值的区别在于:变量间的赋值是将原变量内容复制下来,开辟一个新的内存空间来保存,而引用赋值则是给变量的内容再起一个名字。
2.5.2 预定义变量
PHP还提供了很多非常实用的预定义变量,通过这些预定义变量可以获取到用户会话、用户操作系统的环境和本地操作系统的环境等信息。常用的预定义变量如表2.5所示。
表2.5 PHP的预定义变量
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T44_2.jpg?sign=1739304010-F3AcfDFndIEvDVf7Kq6iB7eaNUiu7H8D-0-28f52b74bf1ba8b9ecd2e1301a9535be)
2.6 PHP操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P45_2.jpg?sign=1739304010-thE73PmCHeaSfP1SrmMFyyxHp9mfBnG5-0-c9451d18953c6d92bbe43117ac4dd926)
视频讲解
“+”“-”“*”“/”都称为操作符。这是因为它们会“操作”或处理放在符号两边的数字。“=”也是一个操作符,称为赋值操作符,因为我们可以用它为一个变量赋值。操作符就是会对它两边的东西有影响或者有“操作”的符号。这种影响可能是赋值、检查或者改变一个或多个这样的东西。完成算术运算的“+”“-”“*”“/”都是操作符。PHP的操作符主要包括算术操作符、字符串操作符、赋值操作符、递增或递减操作符、逻辑操作符、比较操作符、条件操作符和位操作符,这里只介绍一些常用的操作符。
2.6.1 算术操作符
算术操作符是处理四则运算的符号,在数字的处理中应用得最多。PHP常用的算术操作符如表2.6所示。
表2.6 PHP常用的算术操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T45_3.jpg?sign=1739304010-ZRupLsFzwEtnuOz5Yhopnc74vp8IpRo5-0-5a33ef33f9949380fafcdebe1401a9d8)
说明
在算术操作符中使用%求余,如果被除数($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=1739304010-Pr6IoK6Wf3fiJNmnbOxkjjSZRvkfnX45-0-09ce3685a6ad5c8a68f2bd67301b32ab)
运行结果如图2.4所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_2.jpg?sign=1739304010-JYI3dcC2R43gtnDiBJTKb8XV2vkjIZW0-0-692be084303fe29adb1024d3757b7d44)
图2.4 显示花费时间
2.6.2 字符串操作符
字符串操作符只有一个,即英文的句号“.”。它将两个字符串连接起来,结合成一个新的字符串。
例如,将"明日科技"和"有限公司"连接起来。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_3.jpg?sign=1739304010-Gm5N2EegsDVsu9UoorfuWNE1nwRJqLIV-0-54b18bbde761746d431cb8f6719e2190)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_4.jpg?sign=1739304010-fI3jlycV79BtsD7aXt1HTPLTepRPlegS-0-ff17cf060228b0abc25369abd2feb19c)
多学两招
对于字符串型数据,既可以用单引号,也可以用双引号。分别应用单引号和双引号来输出同一个变量,其输出结果完全不同,双引号输出的是变量的值,而单引号输出的是字符串"$i"。例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P46_5.jpg?sign=1739304010-iD2ymRkySszlmZ6uM1RCduPEb0isoX7Z-0-cfaca1ca37a9df31ec772bcb45e3c3e2)
2.6.3 赋值操作符
赋值操作符是把基本赋值操作符“=”右边的值赋给左边的变量或者常量。PHP的赋值操作符如表2.7所示。
表2.7 PHP的赋值操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T47_1.jpg?sign=1739304010-eQRzisnrBN7SVTTdccPQ7KUC61IwMqAu-0-a417c5aae6d44969c38b36942a59161d)
注意
混淆“=”和“==”是编程中最常见的错误之一。
2.6.4 递增或递减操作符
两个加号“++”连接在一起,称为递增操作符。两个减号“--”连接在一起,称为递减操作符。递增或递减操作符有两种使用方法,一种是将操作符放在变量前面,即先将变量作加1或减1的运算后再将值赋给原变量,叫作前置递增或递减操作符,如图2.5所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P47_2.jpg?sign=1739304010-BXaIZe7bdD73OTsi4haz0kbMn4H9tpMw-0-d711a0bc8b87c1b3900c8ad5859044e7)
图2.5 前置递增操作符执行顺序
另一种是将操作符放在变量后面,即先返回变量的当前值,然后变量的当前值作加1或减1的运算,叫作后置递增或递减操作符,如图2.6所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P47_3.jpg?sign=1739304010-Hcpt28I5c9d5TGYucpg9nFipxgJoQKmO-0-6879e389dde8e69558a2c10dd1a9dd0d)
图2.6 后置递增操作符执行顺序
例如,定义两个变量,将这两个变量分别利用递增和递减操作符进行操作,并输出结果。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P48_1.jpg?sign=1739304010-GsiqoXax09lW2KSDFbcaNN5rnwFPiCPJ-0-7f8c8c31fa903163c0001d6345203756)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P48_2.jpg?sign=1739304010-gTRB3odw6SJZpBqxBYeqJaSMDrV5ruTo-0-afd4f088493261b7afb542c1c6c6859f)
2.6.5 逻辑操作符
逻辑操作符用来组合逻辑运算的结果,是程序设计中一组非常重要的操作符。PHP的逻辑操作符如表2.8所示。
表2.8 PHP的逻辑操作符
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T48_3.jpg?sign=1739304010-ZFNUm4qAcRACOGdHW5om1fTWkPRPHU5Q-0-796318e7083071420ccd6594c9aa2fc9)
在逻辑判断时,经常要使用逻辑操作符,在后续章节中会使用到逻辑操作符。
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=1739304010-jolXpxrBhq2EmejmJNtrfMDSSFQD5wEh-0-5027fe069113a322508674dade06eb78)
其中,不太常见的就是===和!==。$a===$b,说明$a和$b不只是数值上相等,而且两者的类型也一样。例如,false和0,在判断时,它们的关系是相等(==),但不是恒等(===)。
2.6.7 条件操作符(或三元操作符)
条件操作符(?:),也称为三元操作符,用于根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序中选择。条件操作符最好放在括号中使用。
例如,应用条件操作符实现一个简单的判断功能,如果正确则输出“条件运算”,否则输出“没有该值”。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P49_2.jpg?sign=1739304010-JqKbagTNgh8oZi5Kj7qXtNofBDhD3sjD-0-31169e37db15cd9de7330eb15bc5c770)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P49_3.jpg?sign=1739304010-Pb1FMFmbouQWzlZbpROSfcBesRnTm7Jz-0-e13702f8a1e746145c05b0f65926ae98)
2.6.8 操作符的优先级
所谓操作符的优先级,是指在应用中哪一个操作符先计算,哪一个后计算,与数学的四则运算遵循的“先乘除,后加减”是一个道理。
PHP的操作符在运算中遵循的规则是:优先级高的运算先执行,优先级低的操作后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先进行。表2.10从高到低列出了操作符的优先级。同一行中的操作符具有相同优先级,此时它们的结合方向决定求值顺序。
表2.10 操作符的优先级
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T50_1.jpg?sign=1739304010-1MdzAbs11GJmOHPnk76YgwIivzGHQ93s-0-76d56f22eb6070a1094e47258823cb8d)
这么多的级别,如果想都记住是不太现实的,也没有必要。如果写的表达式很复杂,而且包含了较多的操作符,不妨多使用括号,例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P50_2.jpg?sign=1739304010-15J8xW0c3RGut1Z2apgcEMlENfoTOjof-0-d63dbf6718ca9ddd2ff60343a90410de)
这样就会减少出现逻辑错误的可能。
2.7 PHP的表达式
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P50_3.jpg?sign=1739304010-atdWZhoNVupoWdfFy3cZOupcxUcy5frw-0-5a67f780edaffc92c783557d6b99d3bf)
视频讲解
表达式是构成PHP程序语言的基本元素,也是PHP最重要的组成元素。最基本的表达式形式是常量和变量。例如,$m=20,即表示将值20赋给变量$m。表达式是PHP最重要的基石。简单的表达式如以下代码所示:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_1.jpg?sign=1739304010-6ZlrmzfexUoBWogu19IqjIgzKIBb6Blb-0-77e5b6c4a043ce4256c3992caf89a917)
上述代码是由两个表达式组成的脚本,即$num=12和$a="word"。此外,还可以进行连续赋值,例如:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_2.jpg?sign=1739304010-RzJKI2YZhchgIoQ3EiPHA9l9aBHNiLHG-0-42964057a38579a8b0d7cc802bc05bbb)
因为PHP赋值操作的顺序是由右到左的,所以变量$b和$a都被赋值5。
在PHP的代码中,使用分号“;”来区分表达式,表达式也可以包含在括号内。可以这样理解:一个表达式再加上一个分号,就是一条PHP语句。
注意
在编写程序时,应该注意表达式后面的分号“;”不要漏写。
2.8 PHP函数
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_3.jpg?sign=1739304010-4iMSon1LOKU6pIZbr8zCGGu9fa967bnV-0-9daab8f7ac64f2237ddb54713d1e6eac)
视频讲解
函数就是可以完成某个工作的代码块,它就像是小朋友搭房子用的积木一样,可以反复地使用。在使用时,只需拿来即用,而不用考虑它的内部组成。PHP函数可以分为两类,一类是内置函数,即PHP自身函数,只需要根据函数名调用即可。PHP备受欢迎的一个原因就是拥有大量的内置函数,包括字符串操作函数和数组操作函数等。例如,var_dump()函数就是输出变量的函数。第二类是自定义函数,就是由用户自己定义的,用来实现特定功能的函数。内置函数可以通过查阅PHP开发手册来学习,下面讲解自定义函数。
2.8.1 定义和调用函数
创建函数的基本语法格式如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P51_4.jpg?sign=1739304010-tLESzWy3ZWJbmroBtrNE9xJY9b2rOpjJ-0-91394f8b734d69f00f8d02c6163a7e68)
参数说明如下。
function:为声明自定义函数时必须使用到的关键字。
fun_name:为自定义函数的名称。
$str1…$strn:为函数的参数。
fun_body:为自定义函数的主体,是功能实现部分。
当函数被定义好后,所要做的就是调用这个函数。调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用。
例如,定义了一个函数example(),计算传入的参数的平方,然后连同表达式和结果全部输出。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_1.jpg?sign=1739304010-Rja4hZ0AjtF09r1VPuNcZNd1L9dVTuxQ-0-d065fdbfbd39dc0499dc34c393fc0465)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_2.jpg?sign=1739304010-WQ4PmXwpGelze0b7qk7DuHiHRPGyCvJt-0-ef1ad7494dd696f14c350d501992765e)
注意
如果定义了一个函数,但是从未调用这个函数,那么,这些代码将永远也不会执行。
2.8.2 在函数间传递参数
在调用函数时,有时需要向函数传递参数,如图2.7所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P52_3.jpg?sign=1739304010-xNYBAQ6HzNMcjAKvOg85S8hF6Z7cev7X-0-a6d4473d1192b8cf5d850a88a666b2f1)
图2.7 函数传递参数
参数传递的方式有按值传递、按引用传递和默认参数3种。
1.按值传递方式
按值传递方式是最常用的参数传递方式,即将调用者括号内的值依次传递给函数括号内的值。从下面的例子中,验证函数接收参数的顺序。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_1.jpg?sign=1739304010-PRPqdwRWXpkLYPGU9IyriuooIUbir23M-0-89ee67ea686387f69f7dc18334aa56e6)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_2.jpg?sign=1739304010-HsWH9yt5XU0TnLDzJdns9B8Sg245e6yB-0-328d4c9d18830479d4c4f7471d030a6d)
2.按引用传递方式
按引用传递就是将参数的内存地址传递到函数中。这时,在函数内部的所有操作都会影响到调用者参数的值。引用传递方式就是传值时在原基础上加&号即可。
举例说明按值传递和按引用传递的区别。
按值传递:张三和李四是同事,张三有一间独立的办公室,张三给李四建筑材料,李四也建造了一个跟张三一模一样的办公室,他们俩在各自办公室办公,彼此独立。
按引用传递:由于公司工费紧张,将李四安排到张三的办公室。二人各有一把钥匙,共用办公室的资源,张三和李四就会相互影响。
例如,下面的代码中,在第一个参数前添加一个&号。代码如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P53_3.jpg?sign=1739304010-h8aWFUvJdPn5T8xxfypgeOQG43C4gvMN-0-b9d9d219178e345e938f5472e746dbbc)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P54_1.jpg?sign=1739304010-MJWf8IAJQ0BTU6SuCEnOnVYUwu4UQ2W7-0-3eedf67e3e8dc3dff8351e203038eb79)
从运行结果可以看出,第一个参数$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=1739304010-U8uEzgxEa3zmmxgRNws5CqZbATqcqUYf-0-501a9543fafbfc318c5c3188fe5f5899)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P54_3.jpg?sign=1739304010-n0BVtTSM3xR82dwHHduVi54jWTjqRZXb-0-260978df8d015d83780a2166dc07e7a7)
注意
当使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。
2.8.3 从函数中返回值
我们已经知道,可以向函数发送信息(参数),不过函数还可以向调用者发回信息。从函数返回的值称为结果(result)或返回值(return value)。函数将返回值传递给调用者的方式是使用关键字return。return将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域。该过程如图2.8所示。
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P55_1.jpg?sign=1739304010-hE8ABAXMHnSoSuKcdQRsV41TZa2x9DCN-0-8adb36bef6c7aaa2a0c1ed23cc3dc90f)
图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=1739304010-3lpCLG7DsSGivX1XxEoU7eVA6gTCnKWy-0-fe9bf2b76071f7fe927132628538226c)
运行结果如下:
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-P55_3.jpg?sign=1739304010-ECyvySfq0JKi8XDThf3llmUkPEJfcBPY-0-2c84a0180c32fea25db735e44e1113a8)
return语句只能返回一个参数,即只能返回一个值,不能一次返回多个。如果要返回多个结果,就要在函数中定义一个数组,将返回值存储在数组中返回。
2.8.4 变量作用域
细心的读者可能注意到,有些变量在函数之外,有些则在函数之内,它们必须在有效范围内使用,如果变量超出有效范围,则变量也就失去其意义了。变量的作用域如表2.11所示。
表2.11 变量作用域
![](https://epubservercos.yuewen.com/3D7998/18562448408358606/epubprivate/OEBPS/Images/Figure-T55_4.jpg?sign=1739304010-8ik9nm5EdVtm71VynzIVTu28Vtm1p0Dr-0-1a449af0b32b19d6160615d08cf5221f)
在函数内部定义的变量,其作用域为所在函数,如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。
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=1739304010-dLANfPgrmhzYEHborI4iroAQrQVDa1S7-0-0a173943fdc078122b3045aa679b4814)
图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=1739304010-TXupbm6fRrOK3QMezZ1wGsM9edCff9e1-0-becc3662065a86823bb9b25bcbe5765c)
图2.10 将华氏温度转化为摄氏温度