第一节--面向对象编程


Posted in PHP onNovember 16, 2006

+---------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+---------------------------------------------------------------------+
*/

第一节--面向对象编程

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

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

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

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

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

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

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

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

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

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

PHP 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
基于mysql的论坛(5)
Oct 09 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP设计模式 注册表模式
Feb 05 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
MYSQL数据库初学者使用指南
Nov 16 #PHP
php.ini 中文版
Oct 28 #PHP
一个可以找出源代码中所有中文的工具
Oct 25 #PHP
《APMServ 5.1.2》使用图解
Oct 23 #PHP
APMServ使用说明
Oct 23 #PHP
别人整理的服务器变量:$_SERVER
Oct 20 #PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 #PHP
You might like
开发大型 PHP 项目的方法
2007/01/02 PHP
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
玩转方法:call和apply
2014/05/08 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python实现配置文件备份的方法
2015/07/30 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python 怎样进行内存管理
2020/11/10 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
毕业自我鉴定怎么写
2014/03/25 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
我收到了德劲DE1107
2022/04/05 无线电