(本文于2010.10.01发表在《草根》杂志第四期,LAMP交流超级群(500人):106382633)
PHP由Sapi、Main、Zend和Ext组成,PHP应用由哪些组成?地基+上层建筑。所谓地基就是各个应用间共有的那些部分,像现在流行的很多PHP框架就是试图给你打个地基。我不大喜欢别人给我打地基,所以平时都是自己打地基,自己打的地基牢与不牢自己最清楚。我爸是个建筑家,他建房子的能力在我们小镇也是赫赫有名了,从小耳濡目染,导致我也对打地基搞建筑很感兴趣,现在把这股劲弄到打软件地基上来,看能打出个啥地基出来,嘿嘿。
这个地基应该怎么打?说实话这非常依赖经验。纯理论派的家伙,别看他口若悬河讲起理论来滔滔不绝,你一让他给你写一个出来看看,他立马消失;纯实战派的家伙怎么样,对比想象一下便知,在此不在废话。我不喜欢蛮干,所以我推崇的是中庸之道:理论与实践相结合。
看过一堆框架后相信很多人多少都对什么控制器、视图、模型之类的东西有点熟悉了,在此也不多说。我想说的是,把眼光放远一点,放灵活一点,放实际一点。又远又实际?这不是矛盾么?那可未必。面向对象是不是较新的开发方式?看着那么多粉丝前扑后继“奔向”软件开发的“真理”,我倒开始打退堂鼓。当然,你可以认为我面向对象能力不过关:)然而翻开《人月神话》,感受一下真正的大师对面向对象开发方式的淡然的态度,我忽然觉得以前对面向对象开发的狂热是多么幼稚……
实际上我想说的是,面向对象不过是一种普通的软件开发方式,而且它的名字取得很莫名其妙,什么是“面向”对象?为什么是“面向”而不是“背向”?这很滑稽,所以我宁愿称之为“对象化”编程,以跟“结构化”编程相对应。对象又多少种呢?在PHP里,基础设施大部分是地基对象。注意,我说的是“对象”,而不是“类”。我很反感讨论对象时把类扯进来。PHP程序的一次运行就像一个士兵到一个城堡内送一封信,得到城主的处理后把结果送回,从进城门到出城门这一过程就是PHP脚本的执行过程。它的本质就是“过程”,不认识这个本质的设计注定是失败的。这个过程你会怎么设计?这就跟打基础一样啦。你会想,可能会有两个士兵守城门,进了城门后有向导,向导会问你有什么事,然后告诉你怎么走,走到目的地后又有士兵拦住你要证明,通过证明后才让你进入办事处,然后才是实际的事务,完成事务后一路返回,向各个守卫告别,最后离开城门:整个过程就是PHP脚本的执行过程。
发觉我经常走题万里,看,什么是灵活一点什么是实际一点,怎么打地基,都跑九霄云外去了,抱歉抱歉。实际上灵活、实际等概念跟其它众多优秀设计理念完全是融合在一起的,不好单独抽出来说明而不涉及其它概念,但基于这些互相融合的概念,设计出来的系统却是非常灵活的系统,具有非常低的互相纠缠关系,用术语说,是“耦合”关系。“零件”是极富表现力的隐喻,一个系统的动作都是由零件组织起来的。OK,回到城堡的例子,前面说的守卫啊,向导啊就是各种各样的零件。零件需要“类”吗?直接来看,不需要,它们各成自的职责,管它什么类不类。当你真正需要具有相 同职责的多个零件时,你才真正需要类。我认为就php的执行模式来看,它应该添加一个编程元素:对象,然后赋给它各种修饰,如抽象对象 啦,抽象接口啦,等等。偏偏PHP那班开发人员死脑筋,一味只知道照搬其它语言的概念,对“建设有PHP特色的编程模式”没有冲劲。
好了,不再瞎扯了:)回到城堡上来。刚进门需要一个人接待你,不管你要什么,你总是要进门的嘛,所以初始检查就是这个守卫的责任了,放在PHP里,就是所谓的index.php,所有的请求统一由它来接收。这个守卫要做些什么,有哪些职责,都需要你这个设计师来设计。如果这个人不符合进门标准,那么不好意思,只能请你回去了,呵呵。如果通过了检查,守卫可能要根据你的要求来选择为你服务的后续人员,比如你只认识英文,那我当然要给你布置英文环境了,呵呵。向导又做什么呢,它要根据你想去的目的地为你指路,所以它需要知道你的目的地,和一张城堡地图。如果在城堡地图里找不到你要去的地方,那么sorry,您来错地方了,地图是一件公有物品,因为如果有谁要告诉这个卫兵另一个目的地的话,它都必须是在地图里明确标明的一个地方。对比到PHP里,你很容易就能知道这是一个dispatch+route的过程,呵呵。所以开发这些名词的那些家伙也只是借了些隐喻而已,没什么大不了的,只要你想象力丰富,你完全可以颠倒这个一般的城堡规则,按你的意思来构建属于你的城堡规则。
指令操作数据这种方式,跟数据本身具有绑定的指令这种方式,有什么本质的区别?没有质的区别。你可能会跟我说在认知上有区别,对,但这种区别我认为并没有想象中的那么大,只是把主动权倒了一下而已,并没有多少神奇的能力和效果。面向对象编程实在是被吹得太过了。
不觉得?再看看《领域驱动设计》里的服务。你觉得服务操作实体是不是跟指令操作数据非常相像?这是一个非常大的讽刺,面向对象的终点,却是它们所不屑的“指令操作数据”的编程方式!呜呼,“面向对象技术并没有给我们带来‘神奇的效应’,不管开发商如何吹嘘面向对象OO(Object-Oriented)工具是多么万能,也不管那些OO狂热者是多么毅然地前赴后继,这方面的数据从20世纪80年代以来并没有发生大的改观”。
反观目前的PHP框架,有多少是遵循了软件设计和对象式编程的精髓呢?很遗憾,没有。Zend Framework?不客气地说,它连幼儿都算不上,还只是个婴儿,而且是个委员会产品,跟软件艺术相差几万光年。
我不喜欢在领域层乱搞对象,这样你只会给自己带来麻烦,你很难灵活地把它们保存到数据库中。虽然我不喜欢过早优化,但即便是不优化,对象映射到关系也是件很麻烦的事情,如果再需要为了性能进行数据库重构,引入各种不合关系数据原则的修改,则情况会更糟。软件开发的首要使命就是降低复杂度,对象关系映射却成功地把复杂度提高到了一个新的高度。当然你熟悉了ORM,小系统开发起来非常快,但不要把这套经验照搬到大负载系统里来,这样你会死得很惨。
再看看ROR,它现在已经为了迎合所谓的“企业级应用”而“成功地”变得越来越复杂,等着看它被彻底抛弃吧。
分享到:
相关推荐
### PHP面向对象手册知识点解析 #### 一、面向对象编程简介 面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计范式,它将数据和处理数据的方法捆绑在一起形成“对象”。OOP 的核心思想是通过...
根据提供的文档信息,本文将详细解析“20140207PHP01_PHP面向对象程序设计.pdf”中关于PHP面向对象程序设计的关键知识点。 ### 面向对象概念 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它...
《深入PHP面向对象模式与实践第2版》是一本专注于PHP面向对象编程的书籍,它不仅涉及到面向对象编程的基础知识,还深入讲解了面向对象设计模式以及如何在实际项目中应用这些模式。该书是对PHP开发者掌握面向对象技术...
在PHP编程语言中,面向对象(Object-Oriented Programming,OOP)是一种强大的设计和实现方法,它允许程序员创建复杂的、可复用的代码结构。本教程将深入探讨PHP中的面向对象特性,包括类、对象、封装、继承、多态等...
PHP面向对象 PHP类结构图 非常全面的类结构解析
本实例将深入探讨如何使用PHP面向对象来实现一个简单的计算器。 首先,让我们了解面向对象编程的基本概念。面向对象编程的核心思想是封装、继承和多态。封装是指将数据和操作数据的方法绑定在一起,形成一个独立的...
在进行PHP面向对象实验的过程中,首先需要掌握的核心概念是面向对象设计思想,这是理解面向对象编程(OOP)的基础。面向对象思想主要涉及对象、类、继承、封装和多态等概念,是通过类来实现的。类可以被看作是创建...
**PHP面向对象高级编程**指的是在PHP 5及以上版本中,利用其强大的面向对象特性进行更复杂的编程。PHP 5引入了对象模型的重构,包括类、对象、继承、封装和多态等基本概念,同时也增加了如析构函数、抽象类、接口、...
【PHP面向对象编程详解】 PHP面向对象编程是PHP5及更高版本中引入的重要特性,它使得PHP能够更好地适应大型和复杂项目的开发需求。面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它基于“对象...
在这种背景下,《深入PHP面向对象、模式与实践》第三版应运而生,成为了PHP开发者提升自身技能、深入理解和实践面向对象编程、设计模式以及软件开发最佳实践的重要参考书籍。 本书以PHP面向对象编程的基础概念为...
【PHP面向对象技术】 PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域中非常流行。自PHP 5版本开始,PHP引入了完整的面向对象编程(Object-Oriented Programming, OOP)支持,大大增强了其功能和灵活性。面向...
《深入PHP:面向对象、模式与实践》是一本专注于PHP编程技术的专业书籍,它涵盖了PHP开发中的核心概念、面向对象编程、设计模式以及最佳实践。这本书对于PHP开发者来说,是提升技能、深化理解的重要资源。 首先,让...
本教程详细阐述了PHP的面向对象特性,包括PHP5面向对象初步,PHP5面向对象进阶,PHP5面向对象高级类特性,PHP5接口与多态,PHP5面向对象异常处理等5个章节。内容丰富,实例清晰,并有相关PHP设计模式的详细实例和...
在PHP编程语言中,面向对象(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它使得代码更加结构化、可维护性更强。PHP从版本5开始全面支持面向对象编程,为开发者提供了丰富的特性,如类、对象、...
《PHP面向对象系列(完整)》是一份涵盖了2010年PHP面向对象编程的精华内容,主要包括了PHP 5.0中的多态性实现、PHP对象相关知识、PHP魔术函数等多个重要主题。以下是这些文档可能包含的关键知识点的详细解析: 1. **...
本文将基于"php面向对象(类)教程"这一主题,深入探讨PHP中的面向对象编程(Object-Oriented Programming, OOP)概念,帮助初学者理解和掌握这一核心技能。 面向对象编程是一种编程范式,它通过类和对象来组织代码...
在本项目中,“PHP面向对象(图像计算器)”是一个利用PHP的面向对象编程(OOP)特性构建的图形化计算工具。这个工具旨在帮助用户通过图形界面进行数学计算,提供了一种直观、友好的方式来执行复杂的数学运算。下面将...
在PHP编程中,面向对象(Object-Oriented Programming, OOP)是一种强大的设计模式,它允许我们通过类和对象来组织和处理数据。本资源主要关注如何在PHP中使用面向对象的方法实现分页功能,这对于处理大量数据时提高...
面向对象编程是PHP中非常重要的编程范式之一,它不仅提高了代码的组织性和可读性,还极大地增强了程序的灵活性和扩展性。学习和掌握面向对象编程的基本原理和技术对于提高PHP开发效率和质量至关重要。