php面向对象编程:封装、继承和多态的浅理解-凯发官网入口
面向对象的编程语言有三大特性:封装、继承和多态。
php 也是面向对象的编程语言,自然也支持这三大特性。php的封装和继承比较好理解,多态理解起则有点抽象。
计算机语言也是人类的行为模拟,面象对象中封装、继承和多态的特性类似工程开发(r&d)方法。
打个比方,用土办法理解php类的三大特性。
假设工程部设计一种系列的发动机,基本流程先是先设计出图纸,根据图纸加工出零件,然后将零件按需装配成型。
那么,工程设计就有降低成本、提高工程开发效率及维护性方便的基本需求。一是即插即用,同一个零件,比方说机器上的螺丝,可以用在不动地方,这种需求的实现类似封装。二是功能移植,同一个部件可以适当重组后应用于不同框架,比如说一种气缸模型可以使用一款发动机的不同位置,也可以应用不同型号的发动机,这种功能的移植和搬运方法就类似继承。为了方便各种零件的灵活对接,工程师们总是想办法以最少的零件实现最多的适配,比方说设计一种usb接口,就可以对接音箱,充电器等多种零件,这种方法就类似多态。
那么,php语言怎样实现封装、继承和多态的这种需求呢?
php类包括了对象和方法两个基本结构,类的三种特性自然也对应基本结构的应用方法。
首先得说,php类本身就是一种封装方法,就象函数一样,类本身就是一种封装。其次,类的结构体内可以使用public、protected、private 来修饰对象的属性和方法。这种不同修饰符下的属性和方法可以保护结构体封装后的不同访问权限,也就是说封装了起来,零件怎么用就怎么封装,方便不同场景下的调用适配。
php继承相对也比较容易理解,使用关键词extends来修饰。通过继承方法,子类中可使用parent访问父类的方法,子类中可重写父类的方法。继承方法类似工程图纸的拷贝和修改,免去了没必要的图纸重复设计。
通过封装和继承方法的对比,看起来二者很是相似,比如说工程师想实现零件的灵活多场景使用,既可以在零件适配性上面下功夫,也可以在整体图纸上面下功夫。事实上也这样,很多场景下封装和继承都可以实现同样的需求,这也是二者实现功能类似的地方。要真说打个比方说二者的不同,封装是零件的处理,继承则是图纸的处理。
面向对象中多态的理解有点模糊,用语言描述也有点拗口。
对于初学者来说,看完多态的实例后似乎理解了,要说清楚又有点麻烦,就象四渡赤水一样,你可能知道是怎么一回事,但战斗过程胶着复杂又难以说得有条理。
我也是个初学者,所以多记一下。
首先忍不住想问,既然封装和继承的方法可以实现部件的灵活搭配,为什么还要设计多态的控制流程呢?
存在即是合理,多态自然有封装和继承难以完成的灵活方法。
这里打个工程开发比喻,可能未必贴切。
假设封装是零件的灵活装配,继承是图纸的灵活修改。那么,有这样一种交叉需求:一个工程有众多图纸和零件,工程师希望封装和继承二者的功能可以结合起来,不同图纸间的相互调用,图纸套用零件以及零件间的搭配都可以灵活组装,这样的话,相当于打通了图纸和零件间的任督两脉,想怎么组装就怎样使用,这就方便了,而多态就是这样一种方法。
也就是说,多态可以使得应用程序更加模块化和具可扩展性。
多态怎样实现这种需求呢?实际上就是多样化地改写属性和方法,灵活地抽象类和调用接口,从而实现更具有弹性的软件工程需求。
多态的实现方法众多,这里是一点小小的理解。
一是函数重写和类重定义。比如说子类覆盖父类,类方法的重写,实际上类似一种继承方法,是一种间接实现多态的方法。
二是类的抽象。类的抽象其实直接提供了灵活的属性和方法的定义,是一种直接实现多态的方法。
二是接口功能。接口也是一种直接实现多态的方法,是最高层的多态实现方法。不同的类之间通过接口互相调用和访问,这样的话实例就气象万千了。
简单来说,函数重写、类抽象和接口是php面向对象实现多态的三种常见方法。
软件开发中,面向对象的设计方法更方便分工合作,实现的代码更加健壮和可扩展,这些功能的实现都是封装、继承和多态的重要功劳。
以上是浅浅的笔记,说的不对请多多指教。