第一节 --
--
--
--
面向对象编程
面向对象编程被设计来为大型软件项目提供解决方案 , 尤其是多人合作的项目 . 当源代码增长到一万行甚至
更多的时候 , 每一个更动都可能导致不希望的副作用 . 这种情况发生于模块间结成秘密联盟的时候 , 就像第一
次世界大战前的欧洲 .
注 : 喻指模块间的关联度过高 , 相互依赖性太强 . 更动一个模块导致其它模块也必须跟着更动
.
想像一下 , 如果有一个用来处理登录的模块允许一个信用卡处理模块来分享它的数据库连接 . 当然出发点是
好的 , 节省了进行另一个数据库连接的支出 . 然而有时 , 登录处理模块改变了其中一个变量的名字 , 就可能割断
了两者间的协议 . 导致信用卡模块的处理出错 , 进而导致处理发票的模块出错
.
很快地 , 体系中所有无关的模块
都可能由此出错 .
因此 , 我觉得有点戏剧性地 , 绝大多数程序员都对耦合和封装心存感激
.
耦合是两个模块间依赖程度的量度 .
耦合越少越好 . 我们希望能够从已有的项目中抽走一个模块并在另一个新项目中使用 .
我们也希望在某个模块内部大规模的更动而不用担心对其他模块的影响 . 封装的原则可以提供这个解决方案 .
模块被看待成相对独立 , 并且模块间的数据通信通过接口来进行 . 模块不通过彼此的变量名来窥探另一个模
块 , 它们通过函数来礼貌地发送请求 .
封装是你可以在任何编程语言中使用的一个原则 . 在 PHP 和许多面向过程的语言中 , 可以偷懒是很有诱惑的 .
没有什么可以阻止你通过模块来构建一个假想的 WEB. 面向对象编程是使程序员不会违背封装原则的一种方
法 .
在面向对象编程中 , 模块被组织成一个个对象
.
这些对象拥有方法和属性
.
从抽象的角度来看 , 方法是一个对象
的所做的动作 , 而属性是对象的特性 . 从编程角度来看 , 方法就是函数而属性是变量
.
在一个理想化的面向对象
体系中 , 每个部份都是一个对象
.
体系由对象及对象间通过方法来形成的联系构成
.
一个类定义了对象的属性
.
如果你在烘烤一组甜饼对象 , 那么类将会是甜饼机
.
类的属性和方法是被调用的成
员
.
人们可以通过说出数据成员或者方法成员来表达 .
每种语言提供了不同的途径来访问对象
.
PHP 从 C++ 中借用概念 , 提供一个数据类型用来在一个标识符下包含
函数和变量。最初设计 PHP 的时候,甚至 PHP3 被开发出时, PHP 并不打算提供开发超过 10 万行代码的大型 项
目的能力。随着 PHP 和 Zend 引擎的发展,开发大型项目变得有可能,但无论你的项目规模多大,用类来书写
你的脚本将可以让代码实现重用。这是一个好主意,特别当你愿意与别人分享你的代码的时候。
有关对象的想法是计算机科学上最令人兴奋的概念之一。开始很难掌握它, 但我可以保证,一旦你掌握了
它,
用它的思维来思考将会非常自然。
第二节 --PHP5
--PHP5
--PHP5
--PHP5
的对象模型
PHP5 有一个单重继承的 , 限制访问的 , 可以重载的对象模型
.
本章稍后会详细讨论的 ” 继承 ” , 包含类间的父 - 子
关系
.
另外 ,PHP 支持对属性和方法的限制性访问
.
你可以声明成员为 private, 不允许外部类访问
.
最后 ,PHP 允
许一个子类从它的父类中重载成员 .
注 :PHP4 中没有 private, 只有 public.private 对于更好地实现封装很有好处 .
PHP5 的对象模型把对象看成与任何其它数据类型不同 , 通过引用来传递
.
PHP 不要求你通过引用 (reference) 显
性传递和返回对象
.
在本章的最后将会详细阐述基于句柄的对象模型
.
它是 PHP5 中最重要的新特性 .
有了更直接的对象模型 , 基于句柄的体系有附加的优势 : 效率提高 , 占用内存少
,
并且具有更大的灵活性 .
在 PHP 的前几个版本中 , 脚本默认复制对象 . 现在 PHP5 只移动句柄 , 需要更少的时间
.
脚本执行效率的提升是由
于避免了不必要的复制
.
在对象体系带来复杂性的同时 , 也带来了执行效率上的收益
.
同时 , 减少复制意味着占
评论0