|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
简介 使用许多编程语言时,你通常只能使用面向对象或面向过程二者之一的编程方法。而在PHP中,你可以自由选择或混用。目前绝大多数PHP程序员使用面向过程的方法,因为解析WEB页面本身就异常“过程化”(从一个标签到另一个标签)。在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方法。 假如你是刚接触PHP,用面向过程的风格来书写代码很可能是你唯一的选择。但是假如你常常上PHP论坛和新闻组的话,你应该会看到有关“对象”的文章。你也可能看到过如何书写面向对象的PHP代码的教程。或者你也可能下载过一些现成的类库,并尝试着去实例化其中的对象和使用类方式--尽管你可能没有真正理解这些类为什么可以工作,或者为什么需要使用面向对象的方式来实现功能。 应该使用“面向对象”的风格还是“面向过程”的风格?双方各有支持者。像“对象是低效的”或“对象异常棒”这样的议论也时有耳闻。本文不尝试容易判断两种方式的哪种具有绝对的优势,而是要找出每种方式的优缺点。 以下是面向过程风格的代码示例: <?php
<?php
谁像这样写代码? 过程狂热 “过程狂热”极端的例子是抵制对象,抵制抽象化。他们总在想着如何让程序运行起来更快,而不在乎别人是否能读懂他们的代码。他们经常把编程当成竞赛而不是团队活动。除了PHP外,他们最喜爱的编程语言是C和汇编。在PHP世界中他们可能会开发PECL模块,贡献出高效率的代码。 对象狂热 对象狂热者指出,假如没有抽象的设计方式我们仍旧在使用0和1进行编程。他们喜欢用伪码来描述问题。极端的例子是对象狂热者即使知道有时候会牺牲效率仍旧使用对象。 除了PHP,他们最喜欢的语言是Java和Smalltalk。在PHP世界中,他们可能会开发PEAR模块,贡献文档化异常好,易于维护的代码。 不要偏激和讽刺 你的编码倾向? 理论化的倾向 这听起来好像很不错。但“代码行数最少”如何来衡量呢?要把代码注释算在内吗? 我们是否要把每一行都串起来而只用分号来区分呢?大括号呢? 很明显这种想法是错误的。 再解释一下什么是“问题层次”。这是否意味着在我们的方案中的每个概念都需要建立一个类?或者需要在每个独立的文件里保持问题的每个部分,并建立一个复杂的文件树来与现实中的问题相对应?就是这样的想法--为每个想法预备一个文件或类! 很明显这些概括极端化后变得可笑。但现实中存在更微妙的证实。是否经常会有程序员在团队合作时插入一行复杂的,强盛的但没有注释的代码?这对于接手维护这些代码的人来说无疑是异常令人沮丧的事。 相反地,是否你的官僚的自以为是的上一级程序员经常“横冲直撞”般地,建立接口和类? 而那些接口和类不仅仅限制了负责实现的程序员,也限制了效率和灵活性,导致客户要求扩展程序时手足无措。 这些都是以上各种倾向的微妙的证实。 实际倾向 • 开发快,发布快
什么时候某种方法更有效? 面向过程案例 另一个反对在PHP4及更低版本中使用面向对象方法进行编码的理由是:在PHP的早期版本中对象的功能并没有经过良好设计。就像Rasmus曾说过的:“那是事后才想起要增加的功能”。这意味着在PHP4及更早的版本中,对象的效率是个问题。但PHP5出来后,这种情形会有改观。 以下两个最流行的PHP程序--OsCommerce 和PhpMyAdmin.主要使用面向过程的编码方法。它们构建起来很快,运行起来也很快。两者都很自然地采用嵌入HTML的方式。 OsCommerce PhpMyAdmin PhpMyAdmin是我几乎天天都要用到的一个工具,用来对少量的数据表进行不太复杂的处理。有时我甚至鼓励我的客户将它当作后端的治理工具来使用(当然我会限制他们的权限)。PhpMyAdmin的表现异常棒,也很快。有时我想在一些项目中扩展PhpMyAdmin作为后端的治理工具,利用它的一些新功能如数据查询语句书签可以很方便地展示给我的客户和编辑。随着每个新版本的推出,PhpMyAdmin越来越实用,功能越来越强盛。 面向过程小结 假如你想把OsCommerce整合到一个帐单程序中,需要花费大量的时间和精力,就像扩展PhpMyAdmin成一个供客户使用的后端治理工具。不过从它们设计的目的来看,确实在各自的领域中都表现地很精彩。 面向对象案例 力的PHP4中,仍旧出现了许多精彩的面向对象应用程序。 Smarty [navigation horizontal separated by \" | \"] 在一个页面的顶端有分隔开的导航。 因为Smarty已经提供了异常强盛的机制来表现变量中包含的数据,这是一个映射较复杂的Smarty标签到skin标签的简朴过程。关于这个的更多信息请看:http://simplequiz.peakepro.com/ FPDF FPDF是一个异常优秀的工具。假如你被改来改去的pdflib的API所困惑,或者不愿为商业化的解决方案而交钱;或者由于共享主机的限制,无法使用扩展模块―请考虑使用这个免费的,纯PHP构建的PDF生成工具。 这个类有很好的文档,包括许多很好的例子来阐述如何在PDF中布局文本和图片。在上面提到的同一个在线学习站点我使用FPDF来动态生成PDF文件,使用true type字体和300dpi精度的图像。在PHP中实例化FPDF类并进行PDF操作并不会花费太多额外的时间,因为PDF本身就可能需要花费几分钟来下载。事实上,动态生成并传送一个PDF所花的时间不比当使用一个慢速的网络连接来传送静态PDF文件所花的时间多。这都是相对而言的。并且,由于FPDF是基于类的,他可以被扩展。事实上,有些类方式虽然存在但还没有完全实现,仅作为一个框架,这可以为你在子类中建立你自己的内容(如自定义的头尾元素)提供向导。 FPDF 这个类有很好的文档,包括许多很好的例子来阐述如何在PDF中布局文本和图片。在上面提到的同一个在线学习站点我使用FPDF来动态生成PDF文件,使用true type字体和300dpi精度的图像。在PHP中实例化FPDF类并进行PDF操作并不会花费太多额外的时间,因为PDF本身就可能需要花费几分钟来下载。事实上,动态生成并传送一个PDF所花的时间不比当使用一个慢速的网络连接来传送静态PDF文件所花的时间多。这都是相对而言的。并且,由于FPDF是基于类的,他可以被扩展。事实上,有些类方式虽然存在但还没有完全实现,仅作为一个框架,这可以为你在子类中建立你自己的内容(如自定义的头尾元素)提供向导。 面向对象小结 为什么两种方法都是必需的? • 我们欣赏Smarty和FPDF的实用性和扩展性 这种欣赏还包括对PHP的一些基础开发。PECL和PEAR都收到了很多赞扬和批评。我想这两个项目为阐明面向过程和面向对象编程的区别提供了很好的例子。 PECl提供了PHP的扩展库,用C和面向过程的方法开发,注意速度和简洁精炼。通常,这些都是从已经存在的LGPL软件中移植而来,其中许多有趣的特性已经加入PHP。究竟,PHP是用C写的。 PEAR则贡献了很多有趣的类如建立Excel表或改变DNS记录等。使用PEAR类库可以为你节约大量时间,甚至可以让你在不怎么认识PHP的情况进行开发―“我不理解但它能用!”。 总结 总之,每种方法都有其优势的一面,纠缠于争论不如离开去写些实际的代码! 返回类别: 教程 上一教程: 一个无限分类的处理类 下一教程: php实现ping 您可以阅读与"PHP中的面向对象和面向过程"相关的教程: · PHP的面向对象编程 · PHP的面向对象编程 · PHP的面向对象编程:开发大型PHP项目的方式(一) · PHP的面向对象编程:开发大型PHP项目的方式(二) · PHP的面向对象编程:开发大型PHP项目的方式(三) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |