PHP(面向对象)中的多态之我解

2023-04-1915:35:14编程语言入门到精通Comments1,517 views字数 1179阅读模式

面向对象中有三大特性:封装、继承、多态。相对于封装和继承,多态要相对复杂一些。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

PHP(面向对象)中的多态之我解文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

多态:相同的操作或函数、过程可以作用于多种类型的对象,并获取不同的结果。也就是说不同的对象,收到相同的消息后能产生不同的结果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

亦可以理解为:多种现状(状态),即一个对外的接口,有多个内部实现的方法,从而得到不同的结果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

比如电商网站中的推荐,男性、女性用户进入首页后,会有不同的商品展示出来,这也是一种多态的表现。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

实例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

最近一个项目中(优喔app,现在可能已经挂掉了),女主播打开世界动态,顶部消息栏有个推送:app监听socket的msgShow方法,将会获取不同的消息推送(男用户登录,用户充值,用户打赏礼物等),内部实现包括socket、http等请求调用相同的接口,方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

  • 我们再举一个简单的例子

场景描述:定义员工的工作状文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

// 定义员工父类class employee{  // 定义员工工作,需要在子类中实现  protected function working(){    echo "本方法需要在子类中重载";  }

子类继承父类文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

//定义油漆工类class painter extends employee{    //实现继承的工作方法    public function working(){      echo "油漆工正在刷漆!\n";    }}
// 定义打字员类class typist extends employee{    //实现继承的工作方法    public function working(){      echo "打字员正在打字!\n";    }}
// 定义经理类class manager extends employee{    //实现继承的工作方法    public function working(){      echo "经理正在开会!";    }}
// 定义处理方法function printworking($obj){    //若是员工对象,则显示其工作状态    if($obj instanceof employee){      $obj->working();    } else{  //否则显示错误信息      echo "Error: 对象错误!";    }}
printworking(new painter());  //显示油漆工的工作printworking(new typist());  //显示打字员的工作printworking(new manager());  //显示经理的工作

分析:在上述程序中,首先定义一个员工基类,并定义一个员工工作状态的方法。然后定义将继承自员工基类的三个员工类:油漆工类、打字员类和经理类。然后定义显示员工工作状态的方法。并在该方法中创建一个“是否”关系,用于判断是否为合法的员工。其结果如下所示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

油漆工正在刷漆!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

打字员正在打字!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

经理正在开会!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

从上例可发现,无论增加多少个员工类,只需要实现自员工父类继承的该员工类和方法。而无须修改显示员工工作状态的方法printworking()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/36246.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/36246.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定