当前位置: 首页 > 后端技术 > PHP

面向对象的不同(一)

时间:2023-03-29 20:15:07 PHP

面向对象的三大特点封装将客观的事物封装成抽象类,类可以通过访问控制来暴露或隐藏自己的属性。让您信任的类或对象使用您公开的属性,而对您不信任的类或对象隐藏您的属性。这样做的目的是将对象本身与对象的使用者分开。用户只需要知道这个对象能做什么就可以了,不需要知道它是如何实现的,这样类的安全性就可以得到保证。举个不恰当的例子。假设我有一个信守承诺的班级。属性有:血量、枪支、攻击范围、等级,方法有:守卫、狙击、后跳、狙击level=$level;}//insertpublicfunctionpushVision(){echo"PushaVision";}//sniperpublicfunctionsniper(){echo"ShotaShot";}//向后跳跃狙击publicfunctionjumpAndSniper(){echo"JumpAndShot";}}当玩家选择信守承诺时,可以看成是创建了一个百里对象合同类。该对象具有该类封装的这些成员属性和方法。玩家只能看到和使用它对外提供的一些属性和方法,比如血量、插眼等,但是像设置关卡一样,对玩家来说是不可见的。.同时,玩家只需要知道百里守一有什么属性和技能,不需要关注具体是怎么实现的。inheritance继承机制可以创建多层次的类,子类继承父类的属性和方法,这样子类对象也具有父类对象的属性和方法。它通常用于提取公共属性或方法。以王者荣耀中的英雄为例。我们在对王者荣耀中的各个英雄进行打包的时候,会发现有些英雄是拥有公共属性的,比如百里、萌。Ya这样的英雄可以进行远程攻击,所以将这类英雄的公共属性和方法抽取出来,封装到一个底层类中,称为射手类。同样像廉颇、盾山这样血量比较厚的英雄,可以封装一个低级的类叫Tank等,在封装射手、法师、坦克的时候发现他们也有一些共同的属性,比如都可以移动、攻击等,也可以抽取封装成一个更底层的类,即英雄类。假设王者荣耀新增一个英雄叫驴,就是射手。首先,它会拥有一些属于自己的独特属性和技能。那么这个英雄就会继承它的父类shooter类。这时候这个英雄就拥有了远程攻击的技能,之后射手类就会继承英雄类。那么这个新英雄就有了移动和攻击等属性。至此,一个全新的英雄就诞生了(数亿在手)。多态可以简单理解为“一个外部接口,多个内部实现”。它的专业定义是:同一个操作作用于不同类的实例,会产生不同的执行结果。即不同类的对象收到同一条消息时,会得到不同的结果。上面的描述还是很抽象的。看例子。在实际开发中,我们通常要编写通用的代码,进行通用的编程,以适应不断变化的需求。我们以王者荣耀为例,假设下面有各种射击职业。,他们都有射击方法functionoperateShot($obj=null)//处理射击的方法{echo"操作错误";}}operateShot(newBailiShooter());operateShot(newmengYaShooter());输出:BailiShootingMengYaShooter上面定义了两个射手类:Mengya和Baili。然后下面有一个处理射击的方法,判断传入哪个射手进行射击,然后调用相应的射击方法。可以看出,如果有新的射手进行射击操作,首先需要定义具体射手的类,然后实现一个射击方法,然后在射击方法中加入判断。这种扩展性很差。如果使用多态,就可以很好的解决这个问题。首先可以创建一个射手父类,在父类中定义一个射击方法,所有具有射手属性的英雄都继承这个父类。类(会同时继承父类的所有属性和方法),每个子类可以实现自己的父类的拍摄方法shot();}else{echo"OperationError";}}operateShot(newBailiShooter());operateShot(newmengYaShooter());Output:BailiShootingMengyaShooting现在你可以很容易地扩展它,只需要继承Shooter类并修改射击你可以通过重载实现你自己的射击方法方法