重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关如何在php中实现多态,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
苏仙网站建设公司创新互联,苏仙网站设计制作,有大型网站制作公司丰富经验。已为苏仙数千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的苏仙做网站的公司定做!
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。
在面向对象的软件开发中,多态性是最为重要的部分之一。面向对象编程并不只是将相关的方法与数据简单的结合起来,而是采用面向对象编程中的各种要素将现实生活中的各种情况清晰的描述出来。这一小节将对面向对象编程中的多态性作详细的讲解。
什么是多态
多 态(Polymorphism)按字面上意思理解就是“多种形状”。可以理解为多种表现形式,也即“一个对外接口,多个内部实现方法”。在面向对象的理论 中,多态性的一般定义为:同一个操作作用于不同的类的实例,将产生不同的执行结果。也即不同类的对象收到相同的消息时,将得到不同的结果。
在实际的应用开发中,采用面向对象中的多态主要在于可以将不同的子类对象都当作一个父类来处理,并且可以屏蔽不同子类对象之间所存在的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
多态实现条件
多态的实现有三个条件:首先必须有继承,即必须有父类(或基类)及其派生的子类。其次必须有父类的引用指向子类的对象,这是实现多态最重要的一个条件。最后必须有方法的重写,即子类必须对父类的某些方法根据自己的需求进行重写,方法名和参数都是相同的。
php实现多态的方法:
1、通过实现接口实现多态
下面的例子中,UserAdmin类的静态方法,要求一个User类型的参数。
在后面的使用中,传递了一个实现了User接口的类NormalUser的实例。代码成功运行。
interface User{ // User接口 public function getName(); public function setName($_name); } class NormalUser implements User { // 实现接口的类. private $name; public function getName(){ return $this->name; } public function setName($_name){ $this->name = $_name; } } class UserAdmin{ //操作. public static function ChangeUserName(User $_user,$_userName){ $_user->setName($_userName); } } $normalUser = new NormalUser(); UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例. echo $normalUser->getName(); ?>
程序运行结果:
Tom
2、通过继承关系实现多态
利用接口与组合,在一个类中将另外一个类设置成属性来模拟多重继承,通过继承关系实现多态。
下面是类和子类的关系。
class User{ // User接口 public function getName(){} } class NormalUser extends User { // 继承自User类 private $name; public function getName(){ return $this->name; } public function setName($_name){ $this->name = $_name; } } class UserAdmin{ //操作. public static function ChangeUserName(User $_user,$_userName){ $_user->setName($_userName); } } $normalUser = new NormalUser(); UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例. echo $normalUser->getName(); ?>
程序运行结果:
Tom
以上就是如何在php中实现多态,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。