上一篇文章我记录了一些关于PHP继承的知识,这篇文章记录一些关于PHP多态的知识。其实不管是何种面向对象的语言,继承都是多态的一个前提。
四、PHP的多态
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。
单纯的看定义的话,感觉有些抽象,没关系,稍后我会举例子,供大家理解什么是多态以及在PHP中如何使用多态。前面说过PHP的重载,那么这就是实现PHP的关键所在,这也类似于在C#中用覆盖来实现多态。还有一个实现PHP多态的方法,就是继承抽象方法,并给其赋予实际的行为含义。下面我给大家举得例子使用继承抽象方法来实现多态。
在现实中我们有各种各样的形状,如:正方形、圆形、三角形等。这些形状如果看成一个个类的话,那么他们都会有一个draw方法,这个方法可以画出这个形状。讲过分析,可以抽象出一个形状的类,这个类则是所有形状的积累,这个类中有个抽象方法:draw。值得注意的是,在PHP中包含至少一个抽象方法的类必须为抽象类,而集成这个抽象类的子类,必须要实现抽象类中的抽象方法,具体的代码如下:
以下是结果:
我画出了一个圆形
我画出了一个正方形
我画出了一个三角形
五、补充知识
1、常量
调用方法,类名::常量
2、静态方法
调用方式和调用常量差不多,不过需要在方法前使用static关键字
3、克隆对象
使用clone关键字
这将创建一个与对象$old具有相同类的副本,切记:不是创建引用。如果,你想改变一些克隆的行为,你在类中写__clone()这个函数,这样在使用clone时,它会被自动调用,执行你想要的行为。
4、__call魔术方法
当你调用一个类中不存在的方法时,它会被自动触发
会输出:
调用了这个方法:myfunc
这个方法最重要的用途就是实现方法的重载,让其根据参数的不同,产生不同的行为。代码示例:
输出结果:
我是圆形
我是正方形
没有具体的形状描述
5、__toString魔术方法
当使用echo打印时,将调用这个函数。