诗意的边缘
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

这本书是写给哪些人看的

本书适合有一定PHP基础和开发网站经验的读者学习,以进一步提高网络应用程序的开发效率。Zend Framework是PHP官方推出的重量级框架,拥有强大的功能和稳健的性能,因为完全采用面向对象思想和模式构建,所以相对于仅熟悉面向过程开发的PHP程序员来说显得比较难。本书通过一个完整的网络应用实例,带领读者轻松愉快地掌握该框架。

这不是一本关于诗歌的书,虽然名字叫《诗意的边缘》,但网络程序开发的诗意依托于程序代码,如果说本书除了讲解技术之外,还有一点“文学性”的话,那么这种“文学性”离开程序开发的过程,显得累赘、造作而枯燥,并无可读性。

这是一本Zend Framework的入门级实例教程,但不是PHP的,如果你没有学过PHP,不曾了解过面向对象编程,这本书对你来说可能会有点难——Zend Framework入门时的学习曲线陡峭是出了名的。但是,也有一种可能:本书也可能适合一些开发经验不多,但却有着使用各类开源程序来搭建网站的丰富经验的使用者,如果他们想进入开发领域,那么读这本书可能是一条捷径,他们可以绕过PHP面向过程的编码方式,直接从面向对象入手——我这么说可能会引起争议,因为在很多过来人看来,学好面向过程的原生代码是基本功课,这之后才能开始步入面向对象和框架的领域——我觉得凡事没有绝对,PHP也在进化之中,我编写这本书的主要目的,就是希望一些刚开始接触网站开发的读者能够以面向对象的框架为起点,比较顺利地步入网站开发的行程。如果你是这样的一个新手,本书的过程讲解细致周全,学习起来不会太吃力,然而可能会有一部分内容对你来说显得比较难,需要你以很大的耐心去泡Google、百度,做一些补习功课。

如果你胸怀大志,但既没有学过任何计算机语言,也没有接触过做网站这件事,那么这本书对你来说就很困难了,建议你还是从一些更为基础的书籍着手学习,如可以先学习HTML,并尝试多了解一些PHP的开源程序和PHP的基础知识,对网络编程具备一定的了解之后,再来学习这本书。

框架的诱惑

尽管PHP社区对是否使用框架依然存在争论,但毋庸置疑的是,框架是一种诱惑,无论你目前是否还在抵抗它。如果你还在抵抗那么可敬的PHPer,请继续你快乐潇洒的纯PHP代码之路,如果你已决定投诚,那么勇敢的PHPer,准备好迎接新的挑战吧!

在一些测试数据中,运用框架比运用原生PHP代码要慢很多,但是这些测试结果并不是实际生产环境数据的真实反映。事实上echo "hello world"的简单测试不具有实际意义,因为在实际使用中,即使是使用原生PHP,开发者也免不了会创建一些自己的类库,并在运行时加载,再加上代码缓存、页面缓存等技术的综合运用,使得一些成熟框架在经过充分的性能优化后,与PHP原生代码相比,性能下降得并不像通常想象得那么大。

框架的产生就是原生代码演进到一定程度后的一个结果,可以说开发框架的诞生和发展是行业发展、技术水平提高的必然,使用开发框架将大大提高项目开发效率和促进行业内技术经验共享,从而更好地提升整个行业的开发效率和知识积累。因此选择开发框架可以说是大势所趋。

使用框架,可以使编程看起来不那么像体力劳动,你可以有更多的时间坐下来思考点什么。但这是指使用框架,不是指学习——学习还是一种繁重的体力劳动——直到哪一天你宣称你学会了,你才可以使用它。

那么,在众多的PHP框架之中,我们为什么选择Zend Framework呢?下面的分析或许会对你有所帮助。

Zend Framework作为PHP的官方框架,拥有非常庞大的用户基础和世界顶级的开发人员支持,发展非常稳定,前景很好,但这并不表示它是唯一的、最好的选择。根据开发的需求来决定是否使用它吧!如果只是一个很小的应用并且以后不会有太多的扩展和维护,使用PHP原生代码就很好,使用框架反而降低效率。除了Zend Framework,PHP还有许多优秀框架可选,如CodeIgniter、CakePHP、Yii、Symfony、ThinkPHP、QeePHP/FleaPHP等。其中ThinkPHP、QeePHP/FleaPHP是国产的优秀框架,笔者使用的第一个框架就是ThinkPHP,印象很不错。在这里也推荐一下Yii框架,它是一个身在美国的华人主导开发的,开发效率和运行效率都非常高,有很多令人耳目一新的功能。另外,开发网络程序除了代码级别的框架外,还有一些应用级别的框架可以选用,如Drupal,它已是一个完善的CMS,其核心就包含有论坛、博客等功能,你可以通过在此基础上写模块来扩展功能,可以省很多力气。但相比开发级的PHP框架而言,Drupal在灵活度和程序的运行效率上要差一个量级(Drupal 7版本变得很慢),而且对于PHP开发人员来说,学习起来也并不容易,甚至比以上所提到的某些开发框架还要难一些。

Zend Framework的发展非常快,但国内PHP社区对它的看法似乎还停留在几年前。当听说Windows 8中的应用程序将主要采用HTML 5和JavaScript语言来开发的时候,我意识到在未来,网络编程会以一种更加不可预料的趋势发展,编程语言需要飞速进化,以适应这个时代的需要。所以不管怎么说,更新知识、学习新技术都是必要的,对很多程序员来说,学习新技术本身就是一个不可抗拒的诱惑。

由于本书是讲Zend Framework框架的,所以下面主要介绍一下该框架的优点和缺点。

Zend Framework的优点

1.在所有框架里,Zend Framework显得很强大,给人的印象总的来说就是功能强大、稳健、速度中等。要获得理想的执行效率,需要有好的设计,在开发过程中注意调优,对效率不高的部分,要想办法进行优化。

2.代码严谨规范,是纯正的OOP框架,对PHP的侵入性较其他框架低,因为规范,所以适合多人开发,结合培训成本、协作成本、开发和维护成本等方面综合考虑,在大、中型应用中还是比较理想的开发框架,对于小型应用来说,门槛略高,效能问题突出,显得有点得不偿失。

3.至于Zend Framework效率问题,使用当前最新版本在实际开发和运营中体会到的问题并不严重,实际运行效果要远好于网上传言。

4.与其他框架一样,Zend Framework使得应用程序的维护变得更容易。

5.学好Zend Framework,再去学其他框架会很容易,一般几天就可以上手。

Zend Framework的缺点

没有任何事物是完美的,Zend Framework的缺点也很明显。

1.与某些轻量级的框架相比,Zend Framework显得很臃肿,当然也有点慢(在最新的版本中已大为改观)。Zend Framework肥大臃肿的印象,很大程度上来自于它的下载压缩包的体积,而实际上这个压缩包里有许多不属于框架本身的示例、文档和扩展,你可以选择精简版的压缩包进行下载。另外框架中许多不用的组件是可以删除的,由于Zend Framework设计的松耦合性,除少数的一些核心组件外,删除某些组件对框架的使用没有影响。

2.学习曲线陡峭,入门比较难。对大多数人来说,这确实可以算是一个很大的缺点,这也是影响它在国内普及的主要因素之一。Zend Framework的文档大而全,但却并不友好,显得太理论化了,难以理解,与实际应用之间的差距较大,而相关的优秀中文教程书籍稀缺,这无疑使学习Zend Framework变得更加困难。不过这也是本书出现的原因,希望读者朋友们看过本书之后,对这种状况的看法能有一些改观。

最后我想说的是,如果一个框架已经完美了,也就没有对它怀以梦想的乐趣了。相信随着语言的进化,以及硬件条件的变革(如云服务的使用),在不远的将来,Zend Framework引起纠结的这些问题会逐渐淡化,被新的问题所取代。

保持简单

简洁是智慧的灵魂,冗长是肤浅的藻饰。——莎士比亚

很多人喜欢把事情搞复杂,而我喜欢KISS(Keep It Simple,Stupid!)原则:“保持简单而且傻瓜化”,本书的写作也以此作为指导思想。我将简单作为设计的首要目标,让初学者能够轻松入门。我提醒自己要时刻记得自己编写这本书的初衷:自己在学习Zend Framework的过程中,看到很多把开发网络程序这么一件有趣的事情搞得无比复杂、枯燥的教程,有时真的像天书一样让人不明所以,经过反复琢磨弄明白之后,才发现那些难以理解的东西原来都应该是很容易理解的,于是我渐渐地想把这些东西理清楚,分享给为此深感痛苦的初学者们,以免他们像我一样走许多弯路。很多人不肯用心去学习和理解知识,而是人云亦云地用大堆的术语把自己和别人的脑袋搞乱,使人彻底丧失学习的信心和兴趣,这种不好的习惯在教育领域比比皆是,不知毁了多少人的求知欲,误了多少人的前程!

例如,在本书实例网站的开发中,在许多地方使用了静态处理,只要能静态写的就不用动态,能够直接用简单办法实现的,绝不为了所谓的优雅而绕很大的弯子。在网站的架构中,注重全局的概念完整性,即功能和复杂度应成比例,在此基础上来安排结构和划分粒度。嗯,“粒度”,这是一个术语,好像有点复杂,不用管它了……

格式约定

本书采用了一些格式约定来帮助你的阅读。

1.文字框:文字框分为命令框、代码框、说明框、警示等。

2.粗体字代码:粗体字代码表示新添加的代码,以此与本已存在的代码区别出来,方便你识别新添加代码所处的位置。

代码提供

本书中所有的示例代码均可以在博文视点的网站下载,网址为www.broadview.com.cn。对付费买本书的读者朋友们,我还将提供以下力所能及的服务。

1.Bug的回馈和修正。

2.对典型疑难问题的解答。

为了提供以上服务,作者在CSDN开设了博客:http://blog.csdn.net/unityoxb,关于本书的资讯均在博客中予以公布,一些置顶信息分别用于提供本书的代码下载、勘误和问题答复等,欢迎访问。

学习建议

以下是作者自己的一些学习心得,写在这里以供借鉴。

专心专注

学编程有点像修炼,心静神宁可以让学习更有效率,浮躁要不得。

不要贪多嚼不烂,一定要精于某一方面。

安排好时间

Zend Framework内容庞杂,学好绝非一朝一夕之功,要有序有节奏,一天一天坚持下去才能有好的收获。

干这一行,熬夜似乎是免不了的,但即便非得熬,也要熬得科学,保证必要的睡眠,调节好生物钟,让作息规律一些。

善待自己,友爱他人

PHP的学习过程是一件非常耗神的事,学进去之后,常常会废寝忘食,所以要注意劳逸结合,不要因在计算机前沉迷而忽略了与家人说说话或出去游玩的重要性。

每天在学习开始前,给自己倒一杯热茶或咖啡,并且记着喝它。

有时翻翻官方手册

你可以不时地去官网看看有什么变化,如有一个思路对头的文档作者重写了手册,或者哪位翻译大家把手册译得适合阅读了。官方手册试图告诉我们Zend Framework能做一切,但却没展示给我们如何去做,尤其是如其所宣称的那样“简单地”去实现某个实用的功能,但即便如此,官方手册到目前为止毕竟还是唯一“权威”的技术文档,我们还是得花点时间去啃一啃。

If you tell me, I’ll soon forget. If you show me, I’ll remember forever. —Chinese Proverb

这是从一本讲Dojo的书的开头摘来的,落款说是中国谚语——耳听为虚,眼见为实?我更喜欢直译:如果你告诉我,我很快就忘了,如果你展示给我,我会永远记得。

开发工具

本书中的实例在LAMP平台上进行开发,测试浏览器采用Firefox 5.0+,并没有在更多的浏览器上进行测试,根据经验,本书中的代码在IE 7+、Chrome等浏览器下运行应该没有严重的问题,但在IE 6下,可能会有一些不正常的显示,主要是由CSS兼容性引起的,由于这不是本书要涉及的内容,所以没有对其进行专门的修正,因此建议大家在学习中,最好避免使用IE 6,以免不必要的问题干扰学习。