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

2023年 7月 11日 29.8k 0

面向对象中有三大特性:封装、继承、多态。相对于封装和继承,多态要相对复杂一些。

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

多态:相同的操作或函数、过程可以作用于多种类型的对象,并获取不同的结果。也就是说不同的对象,收到相同的消息后能产生不同的结果。

亦可以理解为:多种现状(状态),即一个对外的接口,有多个内部实现的方法,从而得到不同的结果。

比如电商网站中的推荐,男性、女性用户进入首页后,会有不同的商品展示出来,这也是一种多态的表现。

实例

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

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

场景描述:定义员工的工作状

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

子类继承父类

//定义油漆工类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());  //显示经理的工作

分析:在上述程序中,首先定义一个员工基类,并定义一个员工工作状态的方法。然后定义将继承自员工基类的三个员工类:油漆工类、打字员类和经理类。然后定义显示员工工作状态的方法。并在该方法中创建一个“是否”关系,用于判断是否为合法的员工。其结果如下所示。

油漆工正在刷漆!

打字员正在打字!

经理正在开会!

从上例可发现,无论增加多少个员工类,只需要实现自员工父类继承的该员工类和方法。而无须修改显示员工工作状态的方法printworking()

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论