在开始这个专题之前,先说一点题外话。大多数人学习编程语言的时候,首先关注的是这种语言的语法及其常用函数。反正,我学习C,Java,Php等语言就是按照这样的方式开始的。一般情况下,这个阶段需要一个月左右的时间就会完全掌握,并能基本熟练地使用。对于已有经验的同学,可能时间更短。其实各种语言的语法和常用函数都差别不大,有很多相通的地方。如果您在学习一种编程语言的时候,拿一些真正的项目任务作为实践,效果更佳,实践远胜于理论。
我们在掌握了一门编程语言之后,又会向两个方向发展:一个方向是向上延伸,从事系统框架的探索;另一方向是向下延伸,从事系统底层方面的研究,我大体画了一下这个学习过程的曲线。
注:虽然我的形象一直用着“高高手”,但我只是个菜鸟,如有雷同,纯属巧合,欢迎善意拍砖。
Php的语法非常简单,它不需要具备很多的知识就能上手,比如:你学习C语言,就必须非常了解各个变量如何定义,指针如何操作,内存如何创建销毁等等。再比如:你学习Java语言,就必须具有面向对象(OO)的基础,就必须清楚是什么时候需要封装,什么时候需要继承,什么时候需要多态,要做项目,怎么还得懂点SSH。Php的大部分使用者可能根本就没这么多讲究,有的人喜欢面向过程,那你就用面向过程的方式来写代码;有的人喜欢面向对象,那你就用面向对象的方式写代码。Php的产生缘于互联网,目前也是互联网第一大编程语言。满足需求永远是第一位的,可维护性暂且可以放在第2位,我们的Web应用永远是β版的,计划远没有变化快。
我们公司里有很多phper,我曾经问过他们:“php程序是如何被执行的?”,似乎多数人都很难说清楚。这其实不奇怪,我曾经拿类似的问题问过Javaer,Javaer的回答也基本如此。有的同学会问:“研究这样的问题有没有实际意义呢?”有!理解系统的底层,有助于写出高效健壮的代码,你会更清楚程序的代码到底该怎么写。另外,写php扩展的同学更是不必说,责无旁贷。
要说清楚这个问题,最好的办法是阅读一下php的源码。我闲来无事,粗读了一遍,愿意与各位共享。
关于php的底层工作原理,绕不开webserver,象apache,lighttpd,nginx,iis等。我这里就以apache开始。以下内容将结合apache的源码、工作原理和扩展来逐步切入php的解析过程。