下载
第一部分高级
PHP 第1章开发思想
命名是所有事的开始。要真正掌握一门编程语言,不仅要理解它的语法和语义,更重要的是掌握语言所体现的哲学思想、语言产生和发展的背景以及
设计特点。
1.1PHP与我
大家是否想过,为什么会有这么多的编程语言?除了所谓“主流语言”例如C、C++、Pascal等之外,还有其他的如Logol、Cobol、Fortran、Simula和许多更加特殊的语言。当列出一个项目的梗概时,大多数
软件开发者不会真正地考虑到可以使用多种编程语言;他们都有自己偏爱的语言(也许是公司指定的一种语言),了解它的优点和它的缺点,并根据语言的具体特点修正项目。但当克服所选语言的缺陷时,就可能会增加不必要的额外
工作。了解如何使用一门语言却缺乏其特定的概念知识,就好像一个开卡车的人想参加二轮马车比赛一样,当然,一般来讲他应该懂得如何驾驶二轮马车,他甚至可能在终点线上跻身前列,但他绝不可能成为一个出色的车手,除非他熟悉新车的独特之处。类似地,当面向对象
程序设计(oop)程序员编写一个应用程序的时候,他会尽力使程序满足项目要求,处理同一个任务,不同的程序员会运用不同的方式。哪种方式更好?每一个程序员会说他(她)的方法最好,但只有那些熟悉两种概念—oop和过程化编程—的人能够作出判断。前面提到的每一种语言代表一种解决
问题的特定方法,这些问题多属于具有特殊要求的某一特殊种类。因为这些语言集中在一个有限的应用领域内,他们的成功性也限制在这些领域。像C和Pascal这样的语言变得如此流行,就是因为它们被广泛应用,并且它们不针对特殊问题,却提供了能很好地解决普遍问题的工具。那么PHP是如何适应这一体系的呢?尽管它被称之为一种语言,但PHP并不是一种真正独立的语言,而是许多语言的混和体。它主要用C的句法,但与C有很大不同。它是被解释的,PHP能识别不同的变量类型,但没有严格的类型检查,PHP识别类,但没有结构体类型,类似的例子很多,但你可能已领会到了关键一点:PHP融合了许多种不同的解决问题的思想,形成了一种全新的、独一无二的方法。为了能够用PHP成功地开发Web应用程序,我们鼓励你首先回答下述问题:PHP是我的项目所需的理想语言吗?问得好。如果我们说不,那我们就会显得很愚笨(谁会去写一本关于他们
2
部分第一部分分高级PHP
下载
认为不好的东西的书呢?)。让我们重新阐述这个问题,对项目来说有比PHP更好的语言吗?这次我们可以很有把握地回答,如果你正在从事
网络应用程序的开发,PHP就是为你准备的最好的语言。
1.2计划的重要性
你为什么应该阅读这一部分即使你是一个很熟悉PHP的职业程序员,我们也建议你阅读下面的部分,因为这里包含了成功开发的基本知识,如果你对所讨论的题目已很熟悉,也应该花时间浏览一下,你可能会发现新的信息—新的题观点、新的解决方法、新的答案,你对解决未来项目的不同方面的问题了解得越多,你就能越好地抓住关键点,并且用更好的方式处理。我们希望你信任我们是职业开发者,并相信我们的经验,这将使你在以后受益。在深入探讨PHP特定问题之前,先让我们从一个更广泛的观点开始。不论你使用什么语言,也不论你在什么平台上开发。有一些问题在应用开发中是总会涉及到的。当从事一个专业项目的时候,考虑一下你正在做什么是至关重要的,“了解你的敌人,永远不要低估它”。尽管你的项目并不是一个真正的敌人,这句话的寓意仍然适用,在转向其他题目时,要知道项目的所有技术条件、目标平台、用户,并且决不要低估那些没有考虑周全的小问题的重要性。据我们的经验,计划占用了50%的开发时间。项目越大,它的纲要就应该越详尽。这一原则既适用于同你的顾客相联系并与他们密切合作以确定一个总的项目概要,又适用于与你的开发者探讨确定一个编码概要。在一致性和可维护性上花的气力越少,就越容易在重新打开旧文件并设法清除错误或添加新的特征时遇到问题。计划所用时间与项目大小并不一定成比例,例如,想一下要设计的一个
搜索算法。这一应用程序只需要在一堆信息中进行基本的,搜索并能根据规则抽取数据,由于数据已经存在,所以创建和输出将不会需要太多的努力。这一应用程序将把它的大部分运行时间花在搜索循环上。这个循环也许用不了100行代码,但是为一个优化的循环选择设计一个优化的算法很容易耗费一整天的时间,这个小小的循环也许是设计阶段最庞大的部分,但另一方面,你可以在不到一天的时间内策划好数千行的代码。同样,我们假定需要一个小脚本来列出某个目录中的所有文件,你能够很快地完成它,使其能从事某一特定任务,在一个特定的目录列出所有文件,不必再担心它了—问题已解决,可以转向其他任务,把你的程序抛在脑后。但另外一种策略是考虑一下以后的某个时间,甚至可能是在一个完全不同的项目中—你可能会再一次需要一种类似的工具,仅仅一遍又一遍地重做目录列举器,每一个对应一个特定的任务,这简直是在浪费时间。因此,当首次遇到这种情况时,应该考虑到这一点,应从一个目录列举器中创建一个分离的模块,允许它列举不同的目录,有选择性地递推子目录,甚至允许使用通配符,你可以创建一个“防弹”函数,它即能处理大多数特例,又能完美地应付一个目录列举器的普通要求。采用这种策略经过几个项目之后,你将拥有一个工具参数的库,可以安全地重新使用和依赖这个库,从而可以极大地减省开发时间。