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 相关文章推荐
一次编写,随处运行
Oct 09 PHP
利用 window_onload 实现select默认选择
Oct 09 PHP
php开发环境配置记录
Jan 14 PHP
解析htaccess伪静态的规则
Jun 18 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
php中Snoopy类用法实例
Jun 19 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP 输出缓存详解
2009/06/20 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
用django设置session过期时间的方法解析
2019/08/05 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
毕业生对母校寄语
2015/02/26 职场文书
个人求职意向书
2015/05/11 职场文书
关于观后感的作文
2015/06/18 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL