轻松学PHP

978-7-115-50468-5
作者: 刘声杰
译者:
编辑: 武晓燕
分类: PHP

图书目录:

详情

全书共分12章,包括PHP的基础知识、MySQL的相关知识、内置函数、面向对象与数据库的相关知识、记账网站的实现、微信开发以及图片上传的原理等。书中的知识结合生活实例进行讲解,而且设计的程序代码也给出了详细的注释,可以使读者轻松掌握PHP程序开发相关知识,快速提高专业开发技能。

图书摘要

版权信息

书名:轻松学PHP

ISBN:978-7-115-50468-5

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    刘声杰

责任编辑 武晓燕

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


PHP是一种创建动态交互性站点的服务器端脚本语言,是建立动态网站的强大工具。PHP的语法吸收了C语言、Java和Perl的特点,主要用于Web开发领域。

全书共分12章,包括PHP的基础知识、MySQL的相关知识、内置函数、面向对象与数据库的相关知识、记账网站的实现、微信开发以及图片上传的原理等。书中的知识结合生活实例进行讲解,而且涉及的程序代码也给出了详细的注释,可以使读者轻松掌握PHP程序开发的相关知识,快速提高专业开发技能。

本书可作为PHP的学习指南,或作为Web开发技术人员的参考用书,也可作为教材供培训机构或者学校使用。


本书是作者将多年以来的自学方法及项目研发经验汇聚在一起而形成的,所以书中的内容会和其他的PHP图书有很大的区别,并且本书重在实践,希望你能够喜欢上它,并从中得到帮助。

告诉你一个秘密,你找到了这样一本PHP图书,它:

本书共有12章,每一章的存在都是有故事的,下面听我娓娓道来。

第1章,预备知识。编程从搭建开发环境开始,而搭建开发环境对于很多初学PHP的人来说比较难,很多初学者因为开发环境一直搭建不好,最后放弃了学习。本章将以最简单的方式将PHP的开发环境搭建好,并实现第一个PHP程序。

第2章,基础知识讲解。将PHP开发环境搭建好之后,我们需要学习一些基础的PHP语法知识,比如变量、选择和循环结构、函数等。有了这些知识,我们就能够进行最基本的编程,这是非常重要的,因为任何复杂的PHP代码都是由这些基本的语法知识组成的。

第3章,将混乱思维拨乱反正的3种方法。虽然经过第2章的学习,我们已经有了基本的PHP编程能力,但是在面对复杂问题时,由于之前没有处理这些问题的经验,所以往往无从下手。本章将引入一些方法帮助你渡过这个难关。

第4章,MySQL数据库。经过第2、3章的学习,我们已经可以开始规划自己的项目了。存储项目的数据是一个迫切需要解决的问题,本章着重讲解PHP的经典搭档——MySQL数据库。本章主要介绍利用命令行的方式操作MySQL数据库。可不要小看这种方式,在生产环境中,基本上都是使用这种操作方式。

第5章,内置函数应用。PHP之所以得到很多程序员的青睐,最重要的一个原因是PHP提供了很多扩展,而这些扩展携带了很多的内置函数,合理利用好这些内置函数能够极大地提高编程速度,让我们有更多的时间来打游戏。

第6章,面向对象与数据库编程。经过前面5章的学习,我们具备了利用函数、选择结构、循环结构等知识来完成项目的能力,但是目前市场上的项目的功能都非常多,仅仅利用这些知识来实现项目的话,可维护性非常低,代码可利用率也不高,所以本章引入面向对象编程来化解这个危机。

第7章,PHP与前端合作的3种方式。实现各种网站是PHP的重要应用方向,而网站页面又是HTML格式,所以PHP与HTML相互合作是必不可少的,本章介绍3种常见的合作方式。

第8章,实现记账网站应用。经过第7章的学习,我们已经具备了实现一个网站的能力,本章就来实现一个简单、小巧的记账网站应用。

第9章,APP接口开发。实现APP接口是PHP的另一个重要应用方向,本章主要介绍写APP接口、测试APP接口以写APP接口文档。

第10章,微信开发那些事。微信二维码分享、支付、扫码登录、小程序等,无处不在的微信应用必然导致PHP朝这个方向发展。本章就带着你来了解一下关于微信开发的知识。

第11章,图片上传那些事。对于初学PHP的朋友来说,上传图片或者文件是一个难点,本章从根本上帮助你厘清上传文件的原理。

第12章,LNMP开发环境搭建。由于大部分互联网公司都会优先将服务器的操作系统选择为Linux,所以在Linux下面搭建PHP的运行环境是PHP程序员的必备技能,本章就来完成这个任务。

学习编程肯定会遇到问题,尤其是对于初学PHP的人,那么遇到问题应该怎么办?以下是给你的一些建议。

经常在贴吧、论坛等地方看到一些培训机构宣传,说学了PHP之后某些人月薪高达多少。这里想告诉你的是,的确有这样的人存在,不过大部分是研究生或者毕业于好的大学的本科生。对于一般学历的、基础也不怎么样的人,很难达到所宣传的薪资。所以,希望你面对这个现实,从现实出发,不断勉励自己,笨鸟先飞。

问:我没有编程基础,可以学习PHP吗?

答:没有编程基础可以学习PHP,但是你还是应该具备一定的网络知识,比如知道浏览器是什么,IP地址是什么,URL是什么。

问:我的学历是大专,可以学习PHP吗?

答:目前社会给企业的压力很大,所以很多企业招人都是优先找有项目经验的,所以对于大专的你,可以准备几个好的项目。

问:PHP是自学好还是去培训机构好?

答:如果你的经济条件比较可观,又没有太强的自我约束力,那么可以考虑去培训机构。反之,建议你自学。虽然自学的路很苦、很枯燥,但是一旦自学成功,这份经历对于你学习其他编程语言(如Java、Python、Go)都有很大帮助。

问:我的英语不好,可以自学PHP吗?

答:学习编程语言不要求你过国家四六级,但基本的英文知识还是需要的。平常可以通过一些APP来学习一下英语,毕竟很多命名还是要用英文。

问:遇到问题时,我能够联系你吗?

答:请及时加QQ群(群号627219017)和我沟通交流。 问:我学了这个可以得到什么样的待遇?

答:这个不一定,获得什么待遇的关键取决于你自己,不取决于我。你项目经验多,能力足够,待遇肯定就高。

问:写这本书的目的是什么? 答:意在帮助很多想入坑PHP的程序员节省不菲的培训费用,并形成一套思维体系。

问:都说PHP已经“死”了,还有必要学吗?

答:任何语言都会“死”,但是我们的思想没有死,学任何语言都是一样的,重要的是我们的思维,编程语言仅仅是一种实现工具。

问:有些软件下载不下来,怎么办?

答:可以到QQ群去下载,我会不定期将最新的软件安装包放在上面。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


目前PHP的主要应用领域有各种网站开发、APP接口开发、第三方平台接口开发、微信开发等,而这一系列的应用领域都是用URL请求的。本章将介绍关于URL的各种知识。

既然是学习PHP编程,那么首先肯定要有一个写PHP代码的编辑器。写好了PHP代码后,还需要一个运行PHP代码的环境。而这一切,在本章中我都会为你一一介绍。

在Web编程领域中,一切皆“请求”。下面是一些常见的请求场景。

上面这么多场景,都说明了一个问题,即在Web编程领域,一切皆请求,且URL在请求中却占着重要的角色。在本书中,如果没有特殊说明,主要讲解的是以HTTP协议为主的URL。

图1-1所示的是在百度里面搜索关键词“怎么自学PHP”的检索结果,想必正在看本书的你,已经这样操作了无数次。在图中除了检索结果外,我们还看到了一个网址https://www.baidu.com/s?wd=怎么自学PHP&rsv_spt=1……,这个网址其实就是一个URL。

图1-1 用百度搜索怎么自学PHP

图1-1中的URL是千千万万个URL中的一个,它仅是一个特例,那么一个完整的URL到底是什么样的呢?下面我们来揭开它的神秘面纱。

图1-2 一个完整的URL

图1-2所示的是一个完整的URL框架,下面我们来对它进行解剖分析。

对比图1-1中的URL和图1-2中的完整URL框架,我们发现username、password、9090(port)和anchor不是必需的,但username、password在FTP类型的URL中非常常用。

PHP提供了一个分析URL组成的内置函数parse_url,我们将在后面的章节中对其进行讲解。

目前常用的浏览器有微软的IE、谷歌的Chrome和Mozilla的Firefox,其他国内的浏览器都是基于这些浏览器开发的。对于开发者来说,有一款好用的浏览器是非常重要的,前端程序员常用的是Firefox,后端程序员常用的是Chrome,所以请首先在计算机中安装Chrome浏览器。

安装好Chrome之后,打开它并按键盘上的F12或者Ctrl + Shift + I快捷键开启浏览器的开发者工具,如图1-3所示。

如图1-3所示,我们可以看到开发者工具包含了几个部分,下面对其进行介绍。

图1-3 Chrome浏览器的开发者工具

作为PHP程序员,利用好上面的几个功能就足够了。

 

提示 

在本书后面的所有章中,如果没有特殊说明,浏览器统一指Chrome浏览器,浏览器开发者工具统一指Chrome浏览器的开发者工具。首次打开没有内容的话,你按Ctrl + F5刷新页面就可以了。

下面我们在百度搜索关键词“怎么自学PHP”,然后打开浏览器开发者工具,看看到底浏览器发送的请求是什么,如图1-4所示。

如图1-4所示,我们发现“怎么自学PHP”变成了一系列的%字符系列,这就是URL编码。

图1-4 Chrome浏览器的开发者工具

为什么要进行编码呢?因为RFC 1738规定URL只可以包括字母数字等很小部分的英文字符。为了传递中文等特殊字符,就必须进行编码,PHP提供了两个常用的编码解码函数:urlcode和urldecode。

图1-5所示的是一个小型PHP网站的运行原理,下面我们对该运行原理进行分步讲解。

图1-5 一个小型PHP网站的运行原理图

在图1-5中,相信作为初学者的你,除了浏览器以外,还对很多模块都不太清楚,下面我将逐个讲解。

1.Web服务器

目前比较常用的是Apache和Nginx。在本书中,我们首先使用Apache,它的最重要的一个功能是将浏览器发送的请求直接处理或者调用PHP解释器处理,并且将处理结果返回给浏览器显示。

所谓直接处理请求指的就是对于一些请求Web服务器能够直接找到对应的文件内容,比如显示一张静态图片,因为这张图片本身就已经存在了,所以Web服务器能够直接将这张图片返回给浏览器,而不需要经过PHP解释器的处理。

2.PHP解释器

在现实场景中,我们需要的是较为复杂的功能,而这些功能的数据是动态生成的,不是生来就有的,所以仅仅依靠Web服务器还无法满足我们,这个时候就可以借助PHP解释器来扩展我们的Web服务器了。这样当Web服务器发现是PHP请求的时候,就会将请求丢给PHP解释器处理。

3.数据库

随着中国高铁网络的形成,大多数人都注册了12306网站并在网站上购买过火车票。为什么我们能够利用注册的账号购买火车票呢?这说明了一个道理,我们注册的数据,12306网站都对其进行了保存。对于保存数据,数据库是一种很重要的手段。因为 PHP常与MySQL数据库合作,所以本书所讲的数据库以MySQL数据库为主。

4.缓存

对于一些特殊的、不经常变化的数据,比如一些统计数据结果,如果每次显示的时候,都去动态计算,这样随着统计数据的增多,程序的响应会越来越慢,具体表现就是在打开一个页面时,页面一直是加载中或者显示为空白。我们可以将这些统计数据结果直接保存到缓存里面去,这样下次请求到来的时候,就可以直接从缓存种获取数据并进行显示了。这是一种重要的提高性能方法,即只计算一次,后面直接取结果。常用的缓存方案有Redis和Memcached。

5.文件

虽然有了数据库保存数据,但是有时候一些数据保存在文件里面或许更方便。比如一些配置文件(如数据库和缓存连接信息、邮件服务器连接信息等),如果采用数据库来保存的话,就多了很多增、删、改、查的麻烦逻辑。所以很多PHP框架都包含了一个类似config的目录,该目录就是用来保存一系列配置文件的。

目前大部分互联网公司都会部署以下4个环境。

1.本地开发环境

所谓本地开发环境,其实就是程序员在自己计算机中安装的开发环境。一般流程都是在本地写好代码并且测试好,然后通过SVN或者GIT等版本控制软件将代码提交并保存,同时将其代码更新到测试环境中,以便测试人员进行测试。

2.测试环境

当开发人员将功能在本地开发环境完成并进行自我测试之后,就会提交代码到测试环境中。测试环境的服务器可以是内网的服务器,也可以是外网的服务器。但是为了节约成本,一般都是内网服务器。

3.发布环境

经过本地环境的自我测试和测试环境的测试,代码理论上应该没有问题了,但是有时候因为各种历史原因,导致测试代码和生产环境的代码有很大的不同,这个时候需要部署一个和生产环境一模一样的环境,即发布环境,以进行线上测试。由于线上测试是对真实数据进行操作,所以需要很谨慎。

4.生产环境

生产环境就是服务于我们的目标用户环境。在这个环境中,理论上不再允许测试代码,因为所有数据都是用户产生的真实数据,如果因为测试导致数据丢失,后果就非常严重了。

在1.4节中我介绍了4个环境,接下来我将接着讲解如何搭建本地开发环境。有了本地开发环境,我们才能够编程。如图1-5所示,要搭建一个本地开发环境,需要做以下事情。

本书前期用的是Windows系统,并且没有采用源码安装开发环境,而是采用了傻瓜式集成软件XAMPP来完成PHP的开发环境搭建,为什么要这样做呢?因为一般在真实的项目环境中,都是采用Linux的各种发行版操作系统,如CentOS、Ubuntu。而要操作这些系统,必须有Shell的相关知识,对于初学者来说,这门槛不低。

在Windows系统开发环境中,入门的PHP代码放在D:\site下,而项目代码放在D:\project下,所有软件安装在D:\software下,请尽可能遵守这个约定。如果你的操作系统只有一个系统盘(如C盘),那么请自己定义这3个目录的存放位置。

在Linux系统下搭建PHP开发环境是一个高级PHP程序员必备的技能,本书后续章节会专门介绍怎样在Linux系统下面搭建开发环境以及安装各种开源软件。

因为在PHP开发中,我们经常需要修改各种配置文件和系统hosts文件,虽然可以采用记事本来修改,但是记事本的体验很不好,比如设置编码非常麻烦,所以我们采用Notepad++来修改。

安装Notepad++的主要步骤如下。

图1-6 Notepad++官方网站显示界面

找到系统的hosts文件(一般在C:\Windows\System32\drivers\etc下),用Notepad++打开并进行编辑。在该文件里面新增一条记录127.0.0.1 www.baidu.com,如图1-7所示。

图1-7 hosts文件内容

保存之后用浏览器访问百度,我们发现了一个神奇的现象——百度网站打不开了。

 

提示 

在hosts文件中#表示注释,就是不生效的意思。

::1表示一个IPV6地址。

如果修改后由于权限无法保存hosts文件,可以以管理员身份运行Notepad++软件再进行修改、保存。

如图1-7所示,我们仅仅添加了一行记录,就导致百度网站无法打开了,为什么会这样呢?

从1.2节PHP网站运行原理我们已经知道,浏览器的请求首先将被发送到Web服务器,而当我们访问百度官网的时候,由于hosts文件的作用,它将访问的是127.0.0.1这个IP地址对应主机上的Web服务器,而这个127.0.0.1对应的主机其实就是我们自己的计算机。我们计算机上肯定没有百度网站了,所以就导致百度网站无法打开。

从上面的描述我们可以看到,hosts文件的优先级非常高,现在仅仅在hosts文件里面添加记录127.0.0.1 www.myself.personsite,就可以完成本地域名的创建。

通过添加这个记录后,我们在浏览器中访问www.myself.personsite时,实际上是访问自己计算机中的www.myself.personsite域名对应的网站。

有了本地域名,接下来我们需要进行Web服务器、数据库和PHP的安装,这里我们选择集成安装软件包XAMPP来一次性安装完这些软件,主要安装步骤如下。

(1)在D:\software目录下,新建一个名为XAMPP的目录。

(2)打开浏览器在XAMPP官网下载安装包,如图1-8所示。

图1-8 XAMPP官方网站显示界面

(3)将下载的安装包安装在D:\software\XAMPP下。在安装的过程中,请参考图1-9进行安装组件选择。

(4)安装完成后打开XAMPP,并启动Apache和MySQL,如图1-10所示。

图1-9 安装组件选择推荐

图1-10 XAMPP运行界面

 

注意 

在运行XAMPP软件后,我们仅仅需要开启Apache和MySQL就可以了。单击Start以开启,如果无法开启Apache,请检查自己是否安装了IIS或其他Web服务器。

在1.5.4节中,我们已经有了本地域名www.myself.personsite,现在需要让Web服务器响应该域名的请求,按照以下步骤进行操作。

(1)打开目录D:\software\XAMPP\apache\conf\extra。

(2)用Notepad++软件打开并编辑文件httpd-vhosts.conf,新增代码清单1-1中内容后重启Apache。

代码清单1-1 www.myself.personsite域名响应配置

1.  #本地www.myself.personsite配置
2.  #serverAdmin表示管理邮箱,你可以任意设置
3.  #DocumentRoot表示网站代码存储位置
4.  #ServerName表示站点域名
5.  <VirtualHost *:80>
6.     ServerAdmin 123456789@qq.com
7.     DocumentRoot "D:/site"
8.     ServerName www.myself.personsite
9.     <Directory "D:/site">
10.       Options +FollowSymLinks
11.       AllowOverride All
12.       Require all granted
13.    </Directory>
14. </VirtualHost>

 

注意 

在增加代码清单1-1的内容到httpd-vhosts.conf文件时,请一定要注意空格的使用,不要将代码连接起来。#表示注释。

因为开启Apache之后,图1-10所示的Start会变成Stop,所以重启Apache就是单击Stop之后再单击一次Start。

经过前面的介绍,我们已经搭建好了大部分的开发环境,现在接着安装写PHP代码的编辑器。写PHP代码的编辑器很多,本书推荐PhpStorm。

安装PhpStorm并执行第一个PHP程序的主要步骤如下。

(1)在D:\software目录下,新建一个名为PhpStorm的目录。

(2)打开浏览器从PhpStorm官网上下载安装包,如图1-11所示。

图1-11 PhpStorm官方网站显示界面

(3)将下载的安装包安装在D:\software\PhpStorm下。

(4)安装完成后运行PhpStorm软件,从该软件中打开D盘下面的site目录,如图1-12所示。

图1-12 从PhpStorm打开D盘中的site目录

(5)打开D:\software\XAMPP\php目录,然后用Notepad++打开php.ini文件,修改时区为中国所在的东八区,如图1-13所示。分号表示注释。

图1-13 修改默认时区为上海

(6)重启Apache,用PhpStorm在site目录下新建一个index.php文件,内容如代码清单1-2所示。

代码清单1-2 index.php

1.  <?php
2.  phpinfo();

打开浏览器访问http://www.myself.personsite,如果可以看到PHP配置页面(如图1-14所示),说明整个开发环境就搭建好了。

图1-14 第一个PHP程序运行结果

作业1:PhpStorm是一个相对复杂的软件,所以你需要多操作该软件,下面是一些操作任务。

作业2:虽然采用XAMPP搭建PHP环境是傻瓜式的操作,但是还是希望你能够多操作几次,直到非常熟悉,以为之后的LNMP环境搭建做好知识储备。

作业3:在图1-10所示的XAMPP运行界面上单击每个按钮,看看都是什么功能,为之后修改各种配置文件做准备。

作业4:认真思考为什么本地域名www.myself.personsite会生效?

作业5:Chrome浏览器对我们来说是非常重要的浏览器,请多看看Network部分,熟悉HTTP的请求头和响应头。


为什么要学习PHP?一个最根本的原因就是想将PHP应用于生活以解决生活中遇到的一些问题。

表2-1是一个记账表格。在生活中,我们很多人都有记账的习惯,回过头来看记账,是不是其实就是对各种消费收入数据进行加减乘除等操作呢?所以,为了用PHP实现这个记账功能,我们需要做两件事,一件事就是将这些数据用PHP表现出来,即数据类型;另一件事就是用PHP将表现出来的数据进行加减乘除等运算,即操作运算符。

表2-1 记账表格

日期

金额(元)

备注

2018-06-01

−32.5

吃饭消费

2018-06-02

+80

兼职发传单

2018-06-10

−25

购买考研书籍

2018-06-11

−115.5

给女朋友买礼物

2018-06-12

+10

悟空问题答题红包

2018-06-13

−25

购买零食

2018-06-14

−32.5

购买无线网卡

2018-06-15

+80

投稿赚钱

2018-07-02

−25

生活消费

2018-07-05

−200

朋友生日红包

2018-08-02

+80

发传单

2018-08-06

−25

网吧打游戏

请认真对待表2-1,因为在本书中它会陪伴你很长时间,记账网站应用开发、APP接口开发和微信开发等应用都是围绕它进行的。

 

注意 

如表2-1所示,我们将日期、金额、备注所在行称为表头,表头下面的行叫作数据行。在本书中如果没有特殊声明,之后的计算都是指数据行,也就是不包括表头。

本章所有代码都是入门级代码,都在D:\site目录下。

为了将PHP的常用数据类型说清楚,现在我们结合表2-1完成以下需求。

如果所要表示的数据中有字母、数字和字母、中文字符、-或_等符号,我们可以用字符串来对其进行表示。例如,表2-1中的日期和备注我们就能够用字符串来表示。

如代码清单2-1所示,PHP提供了4种方式来表示字符串类型的数据。第1种是用单引号围起来,第2种是用双引号围起来,第3种和第4种方式主要用于字符串内容非常多的情况。同时,代码中除了有字符串的表示外,还有$date//,它们分别是PHP中的变量和注释。

代码清单2-1 string_test.php

1.  <?php
2.  //第1种表示
3.  $date = '2018-06-01';
4.  echo $date . PHP_EOL;
5. 
6.  //第2种表示
7.  $date = "2018-06-01";
8.  echo $date . PHP_EOL;
9. 
10. //第3种表示
11. $date = <<<DATE
12. 2018-06-01
13. DATE;
14. echo $date . PHP_EOL;
15. 
16. //第4种表示
17. $date = <<<'DATE'
18. 2018-06-01
19. DATE;
20. echo $date;

打开浏览器访问http://www.myself.personsite/string_test.php,代码清单2-1的运行结果如图2-1所示。

图2-1 代码清单2-1的运行结果

当你进入互联网公司工作后,一般情况下,都不是你一个人在完成项目,而是有很多个同事和你一起完成,甚至同一个功能的代码也是有多个同事和你一起完成。这个时候,如果你对自己的代码不进行注释,那么其他同事是很难看懂你的代码的。

有了注释,其他同事一眼就能够知道这个代码片段、方法或函数是做什么的。

养成良好注释的习惯是一个程序员最基本的素质,从注释就能够看出一个程序员是否有责任心、是否是一个专业的程序员。

在PHP里面我们常用两种注释——单行注释和多行注释(用于注释内容非常多的情况),如代码清单2-2所示。

代码清单2-2 comment_test.php

1.  <?php
2.  //单行注释
3.  $comment = '吃饭消费';
4.  echo $comment . PHP_EOL;
5. 
6.  /*
7.   * 多行注释
8.  */
9.  $comment = '吃饭消费';
10. echo $comment;

为了让读者彻底明白引入变量的意义,我们来做3个代码实验,如代码清单2-3、代码清单2-4和代码清单2-5所示。

代码清单2-3 variable_one.php

1.  <?php
2.  //输出数据到浏览器
3.  echo '兼职发传单';
4.  echo '兼职发传单';
5.  echo '兼职发传单';
6.  echo '兼职发传单';
7.  echo '兼职发传单';
8.  echo '兼职发传单';
9.  echo '兼职发传单';
10. echo '兼职发传单';

现在我们需要将输出的字符串“兼职发传单”变成“购买考研书籍”,于是代码变成了下面这样:

代码清单2-4 variable_two.php

1.  <?php
2.  //输出数据到浏览器
3.  echo '购买考研书籍';
4.  echo '购买考研书籍';
5.  echo '购买考研书籍';
6.  echo '购买考研书籍';
7.  echo '购买考研书籍';
8.  echo '购买考研书籍';
9.  echo '购买考研书籍';
10. echo '购买考研书籍';

看看,仅仅变换一个字符串,我们就要修改这么多行代码,如果有几千行,岂不是非常麻烦?为了解决这个问题,我们引入变量,有了变量,我们就能够随心所欲地修改输出了。

如代码清单2-5所示,我们现在仅仅只需要修改变量的值就可以了。在今后的编程中,我们经常会将从数据库、缓存等地方取到的数据存储进变量中,方便之后的操作。

代码清单2-5 variable_three.php

1.  <?php
2.  //输出数据到浏览器
3.  $echoStr = '购买考研书籍';
4.  echo $echoStr;
5.  echo $echoStr;
6.  echo $echoStr;
7.  echo $echoStr;
8.  echo $echoStr;
9.  echo $echoStr;
10. echo $echoStr;
11. echo $echoStr;

在生活中我们或许会听到这样的故事,某某父亲为了给儿子或者女儿娶一个好听的名字,翻遍新华字典、历史图书等。同样,变量也存在怎么取名的问题。

对比代码清单2-6中的两种形式,我们发现第2种的可读性非常好,其他同事一看就知道这个变量是什么意思。比如$date一看就知道它表示的是日期。

代码清单2-6 variable_intitle.php

1.  <?php
2.  //第1种变量表示
3.  $one = '2018-06-01';
4.  $two = '吃饭消费';
5. 
6.  //第2种变量表示
7.  $date = '2018-06-01';
8.  $comment = '吃饭消费';

从这个例子我们可以看出,取变量名的规则是:语义化,用英文单词来表示。这样做,和你一起协同开发的程序员就可以很容易地明白变量的含义了。可不要小看这个命名规则,它对于数据库和数据表命名、之后的函数命名和类命名、CSS属性命名及JavaScript里面的相关变量和函数等的命名都适用,我为它取名为“命名语义化原则”。

如果需要表示的数据是数值,并且是非小数,那么可以使用整数来表示。学生年龄、一个班级的人数等就可以用整数表示,如代码清单2-7所示。

代码清单2-7 integer.php

1.  <?php
2.  //班级人数
3.  $classPeopleCount = 56;
4.  echo $classPeopleCount;

如果需要表示的数据是数值,那么可以使用浮点数(小数)来表示。商品价格、订单的金额等就可以用浮点数表示,表2-1中的金额既有小数也有整数,所以可以用浮点数来表示,如代码清单2-8所示。

代码清单2-8 float.php

1.  <?php
2.  //商品价格  
3.  $goodsPrice = 56.5;
4.  echo $goodsPrice;

经过前面的学习,我们已经可以用PHP将表2-1里面的日期、备注和金额等数据都表示出来了,但是还有一个问题,就是这些数据非常零散,这是什么意思呢?现在我要将表2-1中的第一行数据表示出来该怎么办?将第1~3行的数据表示出来又该怎么办?一行数据里面既有字符串也有浮点数,比较零散。为了完成这两个需求,我们不得不引入数组。

如代码清单2-9所示,我们发现PHP提供了两种表示数组的方法,第1种表示方法是从PHP 5.4版本之后开始支持的。

代码清单2-9 first_data.php

1.  <?php
2.  //第1种表示
3.  $billData = [
4.     'date' => '2018-06-01',
5.     'money' => -32.5,
6.     'comment' => '吃饭消费'
7.  ];
8.  //输出数据到浏览器
9.  print_r($billData);
10. 
11. //第2种表示
12. $billData = <strong>array</strong>(
13.    'date' => '2018-06-01',
14.    'money' => -32.5,
15.    'comment' => '吃饭消费'
16. );
17. //输出数据到浏览器
18. print_r($billData);

打开浏览器访问http://www.myself.personsite/first_data.php,代码清单2-9的运行结果如图2-2所示。

图2-2 代码清单2-9的运行结果

如代码清单2-9所示,我们已经用PHP成功地将一行数据表示出来了。那么如果要表示多行数据该怎么办呢?下面我来为你揭晓答案。

如代码清单2-10所示,我们顺利地用数组将第1~3行的数据表示出来了,并且在代码的最后一行还输出了第二行数据下面的comment值。

代码清单2-10 muli_data.php

1.   '2018-06-01',
7.         'money' => -32.5,
8.         'comment' => '吃饭消费'
9.     ],
10.    //第2行数据
11.    [
12.        'date' => '2018-06-02',
13.        'money' => 80,
14.        'comment' => '兼职发传单'
15.    ],
16.    //第3行数据
17.    [
18.        'date' => '2018-06-10',
19.        'money' => -25,
20.        'comment' => '购买考研书籍'
21.    ]
22. ];
23. //输出数据到浏览器
24. print_r($billData);
25. 
26. //第2种表示
27. $billData = array(
28.    //第1行数据
29.    array(
30.        'date' => '2018-06-01',
31.        'money' => -32.5,
32.        'comment' => '吃饭消费'
33.    ),
34.    //第2行数据
35.    array(
36.        'date' => '2018-06-02',
37.        'money' => 80,
38.        'comment' => '兼职发传单'
39.    ),
40.    //第3行数据
41.    array(
42.        'date' => '2018-06-10',
43.        'money' => -25,
44.        'comment' => '购买考研书籍'
45.    )
46. );
47. //输出数据到浏览器
48. print_r($billData);
49. 
50. //访问第2行记录下面的comment值
51. echo $billData[1]['comment'];

打开浏览器访问http://www.myself.personsite/muli_data.php,代码清单2-10的运行结果如图2-3所示。

图2-3 代码清单2-10的运行结果

在PHP中,数组是一个非常重要的数据类型,下面我们继续讲解数组相关知识。

如代码清单2-11所示,我们发现数组其实就是一个key => value的键值对,只不过如果忽略key的话,默认key就是从整数0开始的。

代码清单2-11 array_access.php

1.  <?php
2.  //第1种表示
3.  $consumeIncomeData = [
4.     'date' => '2018-06-01',
5.     'money' => -32.5,
6.     'comment' => '吃饭消费'
7.  ];
8. 
9.  //依次输出各个值
10. echo $consumeIncomeData['date'] . PHP_EOL;
11. echo $consumeIncomeData['money'] . PHP_EOL;
12. echo $consumeIncomeData['comment'] . PHP_EOL;
13. 
14. //各个金额数组
15. $moneyArr = [-32.5, 80, -25, -15];
16. //依次输出各个金额
17. echo $moneyArr[0] . PHP_EOL;
18. echo $moneyArr[1] . PHP_EOL;
19. echo $moneyArr[2] . PHP_EOL;
20. echo $moneyArr[3] . PHP_EOL;

打开浏览器访问http://www.myself.personsite/array_access.php,代码清单2-11的运行结果如图2-4所示。

图2-4 代码清单2-11的运行结果

经过第2.1节的学习,我们已经用合理的数据类型将表2-1这个记账表格中的各种数据表示出来了。现在我们来进行第二件事,即对这些数据进行各种运算。

还记得数学的加、减、乘、除、乘方、取余等运算吗? PHP支持这些运算,如代码清单2-12所示。

代码清单2-12 arithmetic_test.php

1.  <?php
2.  //定义3个变量
3.  $a = 2;
4.  $b = 5;
5.  $c = 4;
6. 
7.  //输出加减乘除等运算结果
8.  echo $a + $b . PHP_EOL;
9.  echo $b - $a . PHP_EOL;
10. echo $a * $c . PHP_EOL;
11. echo $c / $a . PHP_EOL;
12. 
13. //输出取余结果
14. echo $b % $a . PHP_EOL;
15. 
16. //输出乘方结果
17. echo $a ** $c;

打开浏览器访问http://www.myself.personsite/arithmetic_test.php,代码清单2-12的运行结果如图2-5所示。

图2-5 代码清单2-12的运行结果

除了算术运算外,我们还经常做比较运算,比如大于、小于、不大于、不小于、等于等,PHP也提供了这些运算,如代码清单2-13所示。

代码清单2-13 compare_test.php

1.  <?php
2.  //定义3个变量
3.  $a = 2;
4.  $b = '2';
5.  $c = 4;
6. 
7.  //比较运算只有两个结果,true和false
8.  //等于比较,不比较数据类型
9.  var_dump($a == $b);
10. //等于比较,同时比较数据类型
11. var_dump($a === $b);
12. //不等于比较,不比较数据类型
13. var_dump($a != $b);
14. //不等于比较,同时比较数据类型
15. var_dump($a !== $b);
16. var_dump($a > $c);
17. var_dump($a < $c);
18. var_dump($a >= $c);
19. var_dump($a <= $c);

打开浏览器访问http://www.myself.personsite/compare_test.php,代码清单2-13的运行结果如图2-6所示。

图2-6 代码清单2-13的运行结果

在2.2.2节中,我们介绍了常用的比较运算符,这些比较运算符的结果都是true和false,也就是取值只有两个,要么等于要么不等于,要么大于要么不大于。在生活中我们也会面对这种情况,比如我们要用PHP来表示学生的性别,因为学生的性别要么男要么女,所以可以用布尔值来进行表示。

如代码清单2-14所示,我们用布尔值成功地将一个学生的性别表示出来了。

代码清单2-14 bool_test.php

1.  <?php
2.  //true表示男,false表示女
3.  $studentSex = true;
4.  $studentSex = false;
5. 
6.  //一个学生的数据表示
7.  $studentData = [
8.     'name' => '小明',
9.     'sex' => true,
10.     'age' => 15,
11.     'birthday' => '2003-06-17'
12. ];
13. 
14. var_dump($studentData);

在2.2.2节中,我们介绍了常用的比较运算符,这些比较运算符的结果都是true和false。对于两个数的比较有3种结果:等于、大于、小于。某些特殊情景的比较结果是有3个。PHP7引入了一个新的比较运算符来满足这个生活需求。

打开浏览器访问http://www.myself.personsite/third_compare_test.php,代码清单2-15的运行结果如图2-7所示。

代码清单2-15 third_compare_test.php

1.  <?php
2.  //定义4个变量
3.  $a = 5;
4.  $b = 5;
5.  $c = 6;
6.  $d = 2;
7.  
8.  //如果相等输出0
9.  var_dump($a <=> $b);
10. //如果左边小于右边,就返回-1
11. var_dump($a <=> $c) ;
12. //如果左边大于右边就返回1
13. var_dump($a <=> $d);

图2-7 代码清单2-15的运行结果

对于刚入门的人来说,理解PHP中的等于(==)和赋值运算符(=)相对比较困难,总是认为赋值运算符就是等于运算符。其实赋值运算符的作用就是将某个数据赋予变量,这样变量里面存储的就是这个新的赋值数据了。

所谓字符串连接符,就是将多个字符串连接起来形成一个字符串,它用.表示。

如代码清单2-16所示,我们能够多次将数据赋予变量,但它存储的是最后一个赋予给它的数据。

代码清单2-16 assign_concat_test.php

1.  <?php
2.  //定义一个变量并将字符串赋予变量
3.  $studentName = '小明';
4.  echo $studentName . PHP_EOL;
5. 
6.  //此刻为小红
7.  $studentName = '小红';
8.  echo $studentName . PHP_EOL;
9. 
10. //定义一个金额变量
11. $money = 25.5;
12. echo '支付宝到账' . $money . '元';

在生活中,我们或许会听到这样的对话。

为了解决这些生活中的对话场景,PHP引入了逻辑操作符,&&表示并且,||表示或,!表示取反。单独讲解逻辑操作符不太好理解,所以在后面章节中我会结合实例对其进行详细介绍。

看完前面的代码清单,你心里肯定有这么一个疑问:一些代码使用echo,一些代码使用print_r,还有一些代码使用var_dump,那么它们有什么区别呢?

print_r和var_dump都具备echo的功能,在今后的项目开发中,我们会经常使用它们来查看从数据库、缓存、第三方接口等地方返回的数据。

经过前面的学习,我们已经能够将数据用合理的数据类型表示出来,并且还能够实现各种数据运算,现在我们接着来看看以下这些需求。

表2-2 每个月统计消费、收入数据显示效果

月份

收入

支出

6月

xx.xx元

-xx.xx元

7月

xx.xx元

-xx.xx元

8月

xx.xx元

-xx.xx元

当你看到这些需求的时候,是不是感觉前面学的知识还远远不够用?为了实现这些需求,我们将引入具有编程性质的四大利器:选择结构、循环结构、顺序结构和函数。

为了完成上面的3个需求,现在我们首先需要将表2-1中的记账数据用PHP表示出来。

如代码清单2-17所示,我们用PHP成功地将表2-1的所有记账数据表示出来了。

代码清单2-17 bill_data.php

1.  <?php
2.  //表2-1的所有记账数据
3.  $billData = [
4.     [
5.         'date' => '2018-06-01',
6.         'money' => -32.5,
7.         'comment' => '吃饭消费'
8.     ],
9.     [
10.        'date' => '2018-06-02',
11.        'money' => 80,
12.        'comment' => '兼职发传单'
13.    ],
14.    [
15.        'date' => '2018-06-10',
16.        'money' => -25,
17.        'comment' => '购买考研书籍'
18.    ],
19.    [
20.        'date' => '2018-06-11',
21.        'money' => -115.5,
22.        'comment' => '给女朋友买礼物'
23.    ],
24.    [
25.        'date' => '2018-06-12',
26.        'money' => 10,
27.        'comment' => '悟空问题答题红包'
28.    ],
29.    [
30.        'date' => '2018-06-13',
31.        'money' => -25,
32.        'comment' => '购买零食'
33.    ],
34.    [
35.        'date' => '2018-06-14',
36.        'money' => -32.5,
37.        'comment' => '购买无线网卡'
38.    ],
39.    [
40.        'date' => '2018-06-15',
41.        'money' => 80,
42.        'comment' => '投稿赚钱'
43.    ],
44.    [
45.        'date' => '2018-07-02',
46.        'money' => -25,
47.        'comment' => '生活消费'
48.    ],
49.    [
50.        'date' => '2018-07-05',
51.        'money' => -200,
52.        'comment' => '朋友生日红包'
53.    ],
54.    [
55.        'date' => '2018-08-02',
56.        'money' => 80,
57.        'comment' => '发传单'
58.    ],
59.    [
60.        'date' => '2018-08-06',
61.        'money' => -25,
62.        'comment' => '网吧打游戏'
63.    ]
64. ];

在生活中,我们总是会遇到各种各样的选择,比如以下场景。

上面的场景其实都是这样的逻辑:如果条件成立,则执行某个操作。在PHP中我们可以用选择结构来实现这些需求。

如代码清单2-18所示,选择结构的第1种表示就是if和else,对应中文就是如果……否则……的意思。下面我们继续用选择结构来实现场景2。

代码清单2-18 select_test_one.php

1.  if ($salary > 8000) $gift = '礼物A';
6.  echo '应该购买的是' . $gift;
7. 
8.  //或者
9.  if ($salary > 8000) {
10.    $gift = '礼物A';
11. } else {
12.    $gift = '礼物B';
13. }
14. echo '应该购买的是' . $gift;

如代码清单2-19所示,对于多种情况的时候,我们通过elseif来实现。对于场景4,PHP还提供了一种特殊的选择结构来实现。

代码清单2-19 select_test_two.php

1.  if ($score > 85) {
7.     $grade = 'A';
8.  } elseif ($score > 75 && $score <= 85) {
9.     $grade = 'B';
10. } else {
11.    $grade = 'C';
12. }
echo '该分数的等级是' . $grade;

如代码清单2-20所示,我们可以用switch和case来完成这种特殊的需求。请注意break语句,break表示终止匹配,要不然即使找到了也还会继续运行代码。default表示其他的情况。

代码清单2-20 select_test_three.php

1.  switch ($userType) {
6.     case 1:
7.        echo '跳转到区域管理页面';
8.        break;
9.     case 2:
10.       echo '跳转到二级代理商页面';
11.       break;
12.    case 3:
13.       echo '跳转到一级代理商页面';
14.       break;
15.    case 4:
16.       echo '跳转到管理员页面';
17.       break;
18.    default:
19.       echo '跳转到默认页面';
20.       break;
21. }

循环结构是一种非常重要的结构,比如商城网站或者APP里面的商品列表、头条新闻里面的新闻列表等,虽然它们的数据不同,但是它们的外貌都是一样的,都可以用循环结构来进行表示。

如代码清单2-21所示,PHP的3种常用循环的示例,其中,foreach在项目中经常使用,while循环在数据库MySQL扩展中会用到。

代码清单2-21 loop.php

1.  for ($i = 0; $i < 10; $i++) {
4.     echo $i . PHP_EOL;
5.  }
6. 
7.  //用于数组或者对象属性的循环
8.  $loopArr = [1, 2, 3, 4, 5];
9.  foreach ($loopArr as $key => $val) {
10.    echo 'key是:' . $key . 'val是:' . $val . PHP_EOL;
11. }
12. 
13. //只要$i小于10就一直执行输出
14. $i = 0;
15. while ($i < 10) {
16.    echo $i . PHP_EOL;
17.    $i++;
18. }

打开浏览器访问http://www.myself.personsite/loop.php,代码清单2-21的运行结果如图2-8所示。

图2-8 代码清单2-21的运行结果

顺序结构和选择结构、循环结构不同。通俗地说,顺序结构就是我们大脑对于功能需求的实现是怎么想的,先执行什么,再执行什么,最后执行什么,然后将其用代码依次表示出来。

在编程中有一个很有趣的现象,就是某些类似的代码片段会在同一个PHP文件或者多个PHP文件中使用,如果我们在每处都反复写这些代码片段,会有很多缺陷,其中一个最重要的缺陷就是:代码冗余。代码冗余什么坏处呢?一个明显的坏处就是,如果代码需要修改,那么你要修改很多个地方,所以为了减少这种情况的发生,我们引入了函数。有了函数,我们就能够将重复使用的代码片段封装起来,在其他需要使用的地方,直接通过函数名称调用就可以了。这样以后需要完善或者修改这段代码的时候,我们只需要修改一个地方就可以了。

PHP有两类函数,一类就是PHP已经实现了的,我们称之为内置函数,一类是我们根据需要写的函数,它被叫作自定义函数。

如代码清单2-22所示,定义一个函数从function开始,后面紧跟的就是函数名称(arrSum),括号里面的是形式参数(arr)。在函数调用的时候,我们直接将实际的值(实际参数)传递给形式参数,剩下的事情,函数自己就去处理了。最后,函数将运算结果通过return返回,供我们之后的代码使用。运行结果为492。

代码清单2-22 func.php

1.  function arrSum(array $arr)
4.  {
5.     $sum = 0;
6.     //如果不是数组,就返回0  
7.     if (!is_array($arr)) return 0;
8.     foreach ($arr as $val) {
9.        //如果是数值类数据才进行累加
10.        if (is_numeric($val)) $sum += $val;
11.    }
12.    return $sum;
13. }
14. $computerArr = [15, 25, 31, 40, 53, 62, 75, 89, 92, 10];
15. //调用函数输出计算结果
16. echo arrSum($computerArr);

不知道大家是否注意到,在代码清单2-22中,有两个函数调用:is_array和is_numeric,这两个函数就是PHP内置函数,即PHP已经帮我们实现了,我们调用就可以了。

某一天,你走在大街上突然看到一个打扮得非常漂亮的女孩,是不是内心有一种想要和她认识的冲动。同样,我们写PHP代码也一样,也应该将代码写得漂漂亮亮的,从而得到面试官或者同事的认可。

目前PHP编码规范普遍用的是PSR规范。下面是PSR规范中的一些常见规范。

还有更多规范,大家可以去相应网站详细了解。

到现在,我们已经掌握了大部分的PHP基础编程知识。为了巩固这些基础知识,你需要完成以下的练习。

图2-9 手册里面的字符串和数组扩展函数


相关图书

PHP、MySQL和JavaScript入门经典(第6版)
PHP、MySQL和JavaScript入门经典(第6版)
PHP和MySQL Web开发学习指南
PHP和MySQL Web开发学习指南
Yii2框架从入门到精通
Yii2框架从入门到精通
B/S项目开发实战 HTML+CSS+jQuery+PHP
B/S项目开发实战 HTML+CSS+jQuery+PHP
Tomcat内核设计剖析
Tomcat内核设计剖析
PHP、MySQL和Apache入门经典(第5版)
PHP、MySQL和Apache入门经典(第5版)

相关文章

相关课程