Login
网站首页 > 文章中心 > 其它

php中多态的体现_多态的体现有哪些

作者:小编 更新时间:2023-08-01 19:40:35 浏览量:29人看过

php中什么是多态?

多态就是同一个行为,作用不同的对象返回的结果不一样,这个用处挺大的

要怎么理解PHP中的多态

面向对象是什么?你可以说出这个答案吗(相信没有正确答案)?我觉得面向对象只是软件工程中的一种工具而已.那软件工程的目的是什么?目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品.既然面向对象是软件工程当中的一种工具,那我们使用面向对象的目的也应该是这些.就是说我们用面向对象的目的是编写出可靠、高效、灵活、易扩展、可复用的软件产品.我们一定要以这个目的为中心来学习和使用面向对象,不然你会失去方向.大多时候讲面向对象,多是讲面向对象本身,而不讲怎么利用面向对象去解决实际的问题,这样很容易误导初学者.再加上华丽的文字,很多人觉得只要面向对象了,什么事都可以OK了.举个例子,给你一把最好的枪,教你如何使用它,过了一段时间你对这把枪了如指掌.现在让你去打靶,结果100发子弹,一发都没有打中.咦,我不是用了最好的枪了吗?为什么一发都打不中?因为你不知道射击要领,不知道如何瞄准靶心,结果当然可想而知了.我们要OOP(Object-Oriented Programming),不要POO(Programming Object-Oriented).

封装是什么?只有在面向对象里才有封装的概念吗?不是的,只要是程序就有封装.大家常常用的变量、函数就是封装.举个例子,你写了取用户状态的函数,对调用这个函数的程序来说,取用户状态逻辑是封闭的,所以逻辑发生变化时,不会对调用的程序造成影响.变量也是封装,你定义了一个int变量,无论你给它赋什么值,对调用这个变量的程序来说,就是一个整数型类型的值.提到封装不得不提接口,因为封装是做接口的过程.接口是什么?只有用了interface这个关键字才是接口吗?词典里的解释是物体的接触面、界面.世界是由物体组成的,所以我们的生活当中到处是接口.你看到一个球,它是圆的,圆就是接口.我们的程序也都是由接口组成的,数据类型、关键字、函数、变量等等.比如说看到int这个词,你就知道它是整数型数据类型,我们可以说:int是整数型数据类型的接口.所以封装和接口不是面向对象特有的概念,只不过在面向对象里它们的范围扩大了而已.我们在网上常常能看到面向对象和面向过程之间的讨论,说哪一个好.其实,这些都是不重要的,因为用哪一个方法,都是做接口的过程.关键在于使用这些方法的程序员,看你的抽象能力怎么样了.

a = 1;

c = a ◆ b;

cout c endl;

cout c endl;

输出结果是

终于要说说对象了,重点就今天这一节~ 第一,类是一个模块.以前我们的模块是一个文件,比如一个.c、.cpp等等.一个模块文件里写什么功能函数没有限制(理论上没有明确定义该怎么写),按开发人员的经验来部署这些功能函数.所以很容易写出超级模块(一个文件里有几十个、几百个函数),代码维护起来很不方便.面向对象就很好的解决了这个问题,只要看过面向对象基础理论的程序员都知道,先定义类,然后把相关的函数放到类里.面向对象里有一个原则,类单一职责原则,遵循这个原则的话,你可以写出很好的模块出来.更重要的是我们沟通维护起来也很方便,比如以前沟通可能是这样的,修改customer.cpp文件里的某一个函数,面向对象里呢,可以这样说修改客户类的某一个方法.这个非常重要,因为这个跟人的思维有密切关系.比如我们到餐厅去吃饭,你对服务员说我要一瓶啤酒,我确信服务员会再问你一句:先生,你要什么牌子的啤酒?但如果你说:我要一瓶百威啤酒,服务员肯定不会再问你.要是把一个系统看成生产线的话,类就是工人.一个工人只负责一个操作,A负责打孔,B负责装螺丝钉,C负责包装.这样做非常有效率,而且出了问题,很好确定问题出现在哪个工人.第二,类是一个自定义数据类型.理解了这点,你的思路会清晰起来,也不会对面向对象感到陌生.看下面的简单例子,

//计算两个数的合

double sum(double a,double b);

int _tmain(int argc, _TCHAR* argv[])

{

double a=0,b=0;

cout sum(a,b) endl;

return 0;

}

double sum(double a,double b)

return a◆b;

例子里,低类型的int和float赋值给了高类型的double,然后用sum函数它们的合.如果编程语言不支持这种转换的话,我们只好写两个函数了,

//处理int的计算

int sum(int a,int b);

//处理float的计算

float sum(float a,float b);

所以我们可以确定-同类型当中,只有提供从低到高类型的转换,才可以实现多态的效果(不知道,没有面向对象以前是什么概念).当然,类作为数据类型,也需要这种转换了.但类是自定义类型,所以,哪个是高类型,哪个是低类型,必须要由我们来定义:父类是高类型、子类是低类型(继承是这么诞生的吗:)).继承让我们可以复用父类的代码,但在这个例子中我们可以看出,它的主要目的是在多态.

上面我们讨论了面向对象和它的三个特征,我们可以看到,这些都是编程当中常常用到的概念.我觉得最大的突破是给我们提供了新的思维模式、新的代码组织结构、定义了以前软件设计中比较模糊的概念(比如多态).那我们怎么转换我们的思维呢?把你想象成公司的经理就可以了.你现在是一家公司的经理了,部门就是子系统,员工就是对象.你需要做的就是这些,

-每天会有很多事需要你处理,做好心里准备.

-公司做什么业务?

-要建立几个部门?,规定部门之间的沟通规则.

-需要什么样的职位?每个职位要做的事是什么?

-规定业务流程,业务流程中,需要哪个部门参与?需要哪个员工参与?他们之间怎么沟通?

-借鉴成功的管理模式,但要符合公司的情况,不要盲目地使用,因为代价太大了.

-不要设置太多的沟通环节,能简单就简单,只要完成目标就可以.

-准备应对变化.世界上没有对于错,永远是前进中不断修正.

就这些啦?恩,道理很简单,但要做一个好公司就非常困难了,因为变数太大了.面向对象也是一样的,需要付出努力,才可以做好.

PHP多态代码实例

多态定义:只关心一个接口或者基类,而不关心一个对象的具体类.(同一类型,不同结果)

这里两个例子:

第一个,我们发现,基类定义了标准,子类进行了自我规则的实现.这是多态的一个要求.同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程.因为你调用的时候不是

stu-showGrade()

而是各自自己的方法;

class

stu{

public

function

showGrade(){

echo

base

class;

xiaomin

extends

is

son

show

xiaoli

doit($obj){

if(get_class($obj)

!=

stu){

$obj-showGrade();

doit(new

xiaoli());

xiaomin());

第二个例子:dovoice

参数规定了$obj

为animal,意识就是用接口

接受了

实现类对象.了向上转型.这就符合同一类型,不同结果了,这就是多态;

实际上在Java中

会是

animal

a

=

new

dog();这样子的;因为PHP

是若类型语言.没有对象转型机制.

interface

animal{

voice();

cat

implements

voice(){

miao~~~br;

dog

wang

~~~br;

dovoice(animal

$obj){

$obj-voice();

dovoice(new

dog());

cat());

PHP中多态如何实现

用trait,定义类,在被继承的类中,use,定义的trait类.

ps:use,可以多个,就是php中简单的多态的实现

以上就是土嘎嘎小编为大家整理的php中多态的体现相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章