Classes and Objects in PHP5-面向对象编程 [1]


Posted in PHP onOctober 09, 2006

作者:Leon Atkinson 翻译:Haohappy 面向对象编程被设计来为大型软件项目提供解决方案,尤其是多人合作的项目. 当源代码增长到一万行甚至更多的时候,每一个更动都可能导致不希望的副作用. 这种情况发生于模块间结成秘密联盟的时候,就像第一次世界大战前的欧洲.

//haohappy注:喻指模块间的关联度过高,相互依赖性太强.更动一个模块导致其它模块也必须跟着更动.

想像一下,如果有一个用来处理登录的模块允许一个信用卡处理模块来分享它的数据库连接. 当然出发点是好的,节省了进行另一个数据库连接的支出.然而有时,登录处理模块改变了其中一个变量的名字,就可能割断了两者间的协议.导致信用卡模块的处理出错,进而导致处理发票的模块出错. 很快地,体系中所有无关的模块都可能由此出错.

因此,我觉得有点戏剧性地,绝大多数程序员都对耦合和封装心存感激. 耦合是两个模块间依赖程度的量度. 耦合越少越好.我们希望能够从已有的项目中抽走一个模块并在另一个新项目中使用.

我们也希望在某个模块内部大规模的更动而不用担心对其他模块的影响. 封装的原则可以提供这个解决方案.模块被看待成相对独立,并且模块间的数据通信通过接口来进行. 模块不通过彼此的变量名来窥探另一个模块,它们通过函数来礼貌地发送请求.

封装是你可以在任何编程语言中使用的一个原则. 在PHP和许多面向过程的语言中,可以偷懒是很有诱惑的.没有什么可以阻止你通过模块来构建一个假想的WEB. 面向对象编程是使程序员不会违背封装原则的一种方法.

在面向对象编程中,模块被组织成一个个对象. 这些对象拥有方法和属性. 从抽象的角度来看,方法是一个对象的所做的动作,而属性是对象的特性.从编程角度来看,方法就是函数而属性是变量. 在一个理想化的面向对象体系中,每个部份都是一个对象. 体系由对象及对象间通过方法来形成的联系构成.

一个类定义了对象的属性. 如果你在烘烤一组甜饼对象,那么类将会是甜饼机. 类的属性和方法是被调用的成员. 人们可以通过说出数据成员或者方法成员来表达.

每种语言提供了不同的途径来访问对象. PHP从C++中借用概念,提供一个数据类型用来在一个标识符下包含函数和变量。最初设计PHP的时候,甚至PHP3被开发出时,PHP并不打算提供开发超过10万行代码的大型项目的能力。随着PHP和Zend引擎的发展,开发大型项目变得有可能,但无论你的项目规模多大,用类来书写你的脚本将可以让代码实现重用。这是一个好主意,特别当你愿意与别人分享你的代码的时候。

有关对象的想法是计算机科学上最令人兴奋的概念之一。开始很难掌握它,但我可以保证,一旦你掌握了它,用它的思维来思考将会非常自然。

PHP 相关文章推荐
PHP6 先修班 JSON实例代码
Aug 23 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
Yii快速入门经典教程
Dec 28 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
php中如何执行linux命令详解
Nov 06 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
第二节 对象模型 [2]
Oct 09 #PHP
第三节 定义一个类 [3]
Oct 09 #PHP
Zend引擎的发展 [15]
Oct 09 #PHP
第五节 克隆 [5]
Oct 09 #PHP
第六节 访问属性和方法 [6]
Oct 09 #PHP
第八节 访问方式 [8]
Oct 09 #PHP
第九节 绑定 [9]
Oct 09 #PHP
You might like
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PDO::getAvailableDrivers讲解
2019/01/28 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
Python 字典dict使用介绍
2014/11/30 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
python实现读取命令行参数的方法
2015/05/22 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
python Paramiko使用示例
2020/09/21 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
Java的for语句中break, continue和return的区别
2013/12/19 面试题
复核员上岗演讲稿
2014/01/05 职场文书
小学语文教学反思
2014/02/10 职场文书
电子商务专业求职信
2014/03/08 职场文书
党务公开方案
2014/05/06 职场文书
竞聘上岗演讲
2014/05/19 职场文书
音乐节策划方案
2014/06/09 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
绵山导游词
2015/02/05 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL