写给PHP新手的入门建议

@泷涯  March 13, 2018

这篇文章其实也不为了什么,只是简单的整理一下我见到的新手经常问的一些问题,以及我自己的一些经验。这些东西也不一定多有用,不过,能帮一个是一个吧

初步认识

首先,先认识一下PHP。如果按照语言的运行方式分类的话,我们常见的语言一般有两种,一种是编译型,一种是解释型。编译型语言代表则是C/C++、Java,它们修改之后需要经过一个“编译”的过程,才能运行。它们一般运算效率比较高。解释型语言代表则是PHP、JavaScript、Python,它们不需要编辑,因此修改可以立刻生效,但是相应的运算效率会有一定损耗。解释型语言流通的原因,是它们满足了当下互联网“快速迭代”的需求,拿一定的性能,来换取开发和运行的便利。

从上面这一小段可以看出,PHP是不需要编译的。那么,难道直接就可以运行PHP?实际上,和JS、Python类似,PHP也需要一个“工具”来运行,我们叫它PHP引擎,或是Zend引擎(因为PHP是Zend公司开发维护的)

编译型语言的编辑、编译、调试等一般是集成到一起的,方便我们使用,我们称之为IDE,例如写C/C++代码一般会用到Visual Studio,写Java代码一般会用到Eclipse、IDEA。解释型语言则不然,它不需要特定的IDE,一般靠普通的编辑器就可以编写。

开始前的准备:环境和编辑器

看了第一段,大家心里应该也有个数了。我们需要两个东西,一个用来运行PHP,一个用来写PHP代码。

因为PHP常作为Web开发语言(当然也不局限于Web),因此,我们常安装的环境,便是Web环境。Windows下,我们一般使用WAMP。WAMP是Windows+Apache+PHP+MySQL的意思,其中,Apache是服务器软件,用来接收和处理HTTP请求,类似的软件还有nginx、lighttpd等。它如果接收到需要PHP进行处理的请求,就将请求交给PHP引擎来处理,处理完成之后,PHP引擎将结果交给Apache,Apache再将结果发给用户。MySQL则是一款常见的数据库软件。如何安装,请自行搜索。

接下来说说编辑器的选择。PHP其实对编辑器没有太多要求,甚至于记事本都可以写(笑)。不过,作为“专业人士”,当然是不可能使用记事本的。比较“重量级”的可以考虑PHPStorm、Zend Studio,它们的特点是“大而全”。如果你喜欢轻量级的,选择也很多,例如,Visual Studio Code、SublimeText、Notepad++。编辑器的选择全凭个人喜欢,没有孰优孰劣之分。当然,在这里面,一般会排除掉Dreamweaver,原因很简单,其一是并不需要它的HTML编辑功能,其二是它在编码识别方面做的不太好。

至于其他学习资料,仁者见仁智者见智。视频根据个人需要,如果你学习能力还可以,那不太需要视频(因为视频讲的太慢了)。书籍可以准备一本或几本(如果你不想看也可以不要)。除此之外,PHP手册也是不能少的资料之一。

PHP到底是怎么运行的

这一段也不深究PHP内核层面的运行机制,就说说最简单的部分。首先,Apache接收到请求,如果请求是应该给PHP处理的,则调用PHP引擎来处理请求。处理完之后,把结果返回给用户。

Apache在这里做了什么事?第一步是判断,一般来说,我们会把后缀为.php的文件作为PHP处理,而其他请求则Apache自己就可以完成处理。调用PHP引擎的时候,Apache会把基本的信息告诉引擎,例如用户IP、HTTP请求头、请求的文件等。最后,将PHP返回的结果拼装成完整的HTTP请求,发回给用户。实际上对Apache来说,PHP做了什么事,它完全“不关心”。对它来说,PHP就是一个“黑盒”。

PHP引擎做了什么事呢?在一些初始化工作后,它会将文件进行语法分析,提取出应该执行的代码。执行完毕后,除了返回结果外,它还会进行一些清理工作,释放资源。因为每个请求都是在接收到时建立、完成时销毁,因此,每个请求之间,除非通过一定机制持久化(例如存到磁盘、存到浏览器等),都是互不干扰的,这也减少了产生内存泄漏的可能性。

HTTP请求

既然要学习Web,就不可避免的要接触到HTTP请求。HTTP请求一般分为请求和响应两个部分。请求和响应又分别分为请求头、请求主体、响应头、响应主体。

请求头一般包含了这个请求的基本信息,例如,请求方式是什么,地址是什么,Cookie有什么。请求主体则一般只存在于POST请求和PUT请求,用来传输一些比较长的数据。

响应头则包含了一些基本信息,例如,服务器发给浏览器的是什么东西,有多大。而主体则是实际内容,供浏览器自行处理。例如,如果响应头告诉浏览器,发给它的是一个网页,则浏览器会把主体拿来渲染。如果响应头里说,这是一个未知的文件,浏览器一般就会显示“下载”提示。

因为头都在主体前面,这也解释了一些常见的问题,比如,为什么header函数前不能有输出。

从Hello World到真正的程序

PHP怎么写Hello World,恐怕搜出来的文章已经不止成千上万了。所以,我也不写Hello World怎么实现,我就讲讲,怎么从Hello World到第一个程序。

首先你可以给自己定一个小目标,比如,我的程序是用来计算一个公式的,那么,我们就需要将公式的未知量输入,然后输出结果。我们来分析一下这里面需要哪些知识:

  • 输入和输出
  • 变量和运算

因为我们讲的是Web开发,所以,输出和输出我们一般靠的是HTML页面。HTML页面中的“表单”则是用来提交数据给服务器的。表单如何使用,请自行搜索相关文章。

将表单的数据接收到后,进行计算,最后像Hello World一样输出。这样,第一个小程序就完成了。

虽然这个例子非常简单,不过,我们也可以学到一些东西。首先,将问题拆分成步骤,然后,分析我缺少哪些知识,再去针对性的找相关文章和文档。最后再动手实践。

不过,我觉得,真正想学的人不会就这样满足。这只是最简单的交互,实际上,Web网站往往都是有持久化存储的。常见的持久化存储不外乎就是文件、数据库。它们具体怎么实现我也不再重复。我们来看下一个小程序,一个留言板,功能很简单,访客可以输入一些文字,然后提交。刷新页面,就可以看到他的留言,并且,其他人也可以看到他的留言。我们来分析一下,有什么功能:

  • 提交留言
  • 展示留言

那么,这些功能需要什么知识?

  • 表单(输入)
  • 写入文件或数据库(存放留言)
  • 读取文件或数据库(展示留言)

在完全自己实现了这个小程序之后,也就代表着你基本上可以独立尝试一些新东西了。接下来,再来一个稍微复杂一点的:博客系统

与上面类似,我们来分析一下功能:

  • 登录(管理员)
  • 写文章、修改文章、删除文章(管理员)
  • 查看文章(访客)

那么,我们又需要哪些知识呢?

  • 持久化状态(用于管理员登录)并进行验证,常见的方式有Session、Cookie(实际上Session也是基于Cookie的)
  • 文件或数据库的增、删、改、查,以及列表

接下来,便是自己去学习相应的知识,然后实现对应的逻辑了。

从上面不难看出,当我们想进行一个程序的开发时,第一步是分析需求(我们需要哪些功能,该怎么安排这些功能)第二步则是分析技术(实现功能需要哪些技术),而最后才是开工。

PHP的进阶

当你能用原生PHP写出一个最简单的博客系统之后,就代表你基本上掌握了PHP的绝大部分原生功能了。这个时候,学习方向就不是“缺什么补什么”了,你就要有目的性的学习。

在“进阶”之前,我认为你应该已经大体掌握的知识有:PHP的基本语法、文件的基本操作、数据库的基本使用、基本的类与对象知识、Session与Cookie。如果没有,那么,请再将博客系统用前面的五个知识实现一遍。

进阶的第一个,就是使用框架。具体哪个框架其实没有特别要求,不过,对新手来说,ThinkPHP是比较合适的,因为它入门很简单,它可以让你快速了解很多概念:MVC、路由、单一入口、自动加载……这些概念在其他框架,甚至于很多其他语言也是适用的。

第二个则是学会使用一些工具和类库,例如用来调试PHP程序的xdebug,用来发送邮件的PHPMailer,用来读写Excel表格的PHPExcel。对于很多类库,你可以多了解一下他们的实现方法,从中可以学到一些小技巧。

第三个则是尝试自己编写一个框架。当你完成一个相对完善一些的框架的编写后,你不但可以快速上手其他框架,也可以达到巩固自己的基础知识的目的。

最后稍微提一下,为什么我觉得,学习框架应该是在“进阶”的时候再做的事,因为框架更重要的是它的设计思想,而不是它怎么用。在你没有扎实的基础前,你只能学会框架的用法。当你面临一个之前没有学习过的框架,或者框架出现了意料之外的问题的时候,你就会束手无策——这不是我想要的结果。

小结

这篇文章就写到这里了,如果你已经把上文的都做到了,那么,该如何发展,自己心里也已经有个数了。希望这篇文章能帮到一些人吧

文章作者:微光网络工作室 泷涯


添加新评论