# PHP 多态
# 什么是多态
多 态(Polymorphism)按字面上意思理解就是“多种形状”。 可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。 在面向对象的理论 中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。 也即不同类的对象收到相同的消息时,将得到不同的结果。
在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理, 并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
多态性语言具有灵活、抽象、行为共享、代码共享的优势。
# 重载(overload)
是发生在同一类中(与什么父类子类、继承毫无关系)
标识一个函数除了函数名外,还有函数的参数(个数和类型)。
也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。
相关概念是:GP、参数多态
覆盖(override), 是发生在子类中,(也就是说必须有继承的情况下才有覆盖发生)
我们知道继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,
那就把那个函数在子类中重新实现一遍。
相关概念是:OOP、继承、子类型多态
# 多态的应用设计
在实际的应用开发中,通常为了使项目能够在以后的时间里的轻松实现扩展与升级,
需要通过继承实现可复用模块进行轻松升级。在进行可复用模块设计时,就需要尽可能的减少使用流程控制语句。
此时就可以采用多态实现该类设计。
# PHP多态
# 参数多态
PHP的类中不允许像C#或者Java那样定义多个名称相同但是参数顺序、类型不同的方法(不支持重载),
而是通过对参数赋默认值的方式来实现函数的参数形式可变。
另外由于PHP是弱类型语言,可以实现如java等强类型语言中靠改变参数类型重载方法的多态形式。
例子:php中的'多态'
function set($name='',$age=0,$sex='male'){
}
调用时:
set('Miss Gao');
set('Miss Gao',21);
set('Miss Gao',21,'women');
例子:c#中的多态,可以定义多个方法名相同的方法,只要他们的方法签名不相同
class Person
{
public void set(string name){}
public void set(string name,int age){}
public void set(string name,int age ,string sex){}
}
# 子类型多态
PHP支持继承