面向对象编程汇总课件

PPT
  • 阅读 55 次
  • 下载 0 次
  • 页数 43 页
  • 大小 850.501 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
面向对象编程汇总课件
可在后台配置第一页与第二页中间广告代码
面向对象编程汇总课件
可在后台配置第二页与第三页中间广告代码
面向对象编程汇总课件
可在后台配置第三页与第四页中间广告代码
面向对象编程汇总课件
面向对象编程汇总课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 43
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】面向对象编程汇总课件.ppt,共(43)页,850.501 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44858.html

以下为本文档部分文字说明:

第五章面向对象编程•面向对象思想•构造方法与析构方法的使用•类与对象的使用•继承与多态的使用目录面向对象概述类与对象构造方法与析构函数类常量和静态成员继承自动加载及魔术方法抽象类与接口多态设计模式命名空间5.1面向对象概念面向对象是一种符合人

类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。5.1面向对象概念–面向对象的特点主要可以概括为封装性、继承性和多态性,具体介绍如下所

示。1、封装性–封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。2、继承性–继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情

况下,对原有类的功能进行扩展。5.1面向对象概念3、多态性–多态性指的是同一操作作用于不同的对象,会产生不同的执行结果。例如,当听到“Cut”这个单词时,理发师的表现是剪发,演员的行为表现是停止表演,不同的对象,所表现的行为是不一样的。5.2类与对象–在面向对象的思想中提出了两个概念,即

类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。接下来通过一个图例来演示类与对象之间的关系,如下图所示。•可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。从图中可以明

显看出对象是根据类创建的,并且一个类可以对应多个对象。5.2类与对象•5.2.1类的定义–类用于描述一组对象的共同特征和行为。类中可以定义字段和方法。类的定义语法格式如下:–通过class关键字可以定义一个类。在类中声明的变量被称为成员属性,主要用于描述对象的特征。在类中声明的函数

被称为成员方法,主要用于描述对象的行为。class类名{成员属性;成员方法;}5.2类与对象•5.2.2对象的创建–根据类创建实例对象,使用new关键字来创建对象,其格式如下:–“$对象名”表示一个对象的引用名称,通过这个引用就可以访问对象中的成员,其中$符号是固定写法,对象名是自定义的

。“new”表示要创建一个新的对象,“类名”表示新对象的类型。“[参数1,参数2]”中的参数是可选的。对象创建成功后,就可以通过“对象->成员”的方式来访问类中的成员。$对象名=new类名([参数1,参数2,…]);•需要注意的是,如果在创建对象时,不需要传递参数,则可以省略类名后

面的括号,即“new类名;”。5.2类与对象•5.2.3类的封装所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。私有化的属性只能在它所在类中被访问。5.2类与对象•5.2.3类的封装–为了能让外界访问私有属性,PHP提供了两种形式,具体如下所示。1、

通过getXxx()和setXxx()方法访问私有属性–为了可以访问私有属性,可以手动编写公有的getXxx()和setXxx()方法,其中,getXxx()方法用于获取属性值,setXxx()方法用于设置属性值。2

、通过__get()和__set()方法访问私有属性–PHP5中预定义了__get()方法和__set()方法,__get()方法用于获取属性私有成员的属性值,__set()方法用于为私有成员属性赋值,两

个方法获取私有属性和设置私有属性时都是自动调用的。5.2类与对象•5.2.4特殊的this–对象一旦被创建,在对象的每个成员方法中都会存在一个特殊的对象引用“$this”,它代表当前对象,用于完成对象内部成员之间的访问。其语法格式如下:$this->属性名;注意:this不

能在类定义的外部使用,只能在类定义的方法中使用。5.3构造方法和析构方法•5.3.1构造方法–在每个类中,都有一个构造方法,在创建对象时会被自动调用。如果在类中没有显式的声明它,PHP会自动生成一个没有参数,且没有任何操作的默认构造方法。当在类中显式声明了构造方法时默认构造方法将不存在

。声明构造方法和声明成员方法类似,其语法格式如下:修饰符function__construct(参数列表){//初始化操作}•需要注意的是构造方法的名称必须为__construct(),修饰符可以省略,默认为public。5.3构造方法和析构方法•5.3.1构造方法注意:1.

构造方法没有返回值。2.构造方法的作用是完成对新对象的初始化,并不是创建对象本身。3.在创建新对象后,系统会自动调用该类的构造方法,不需要手动调用。4.一个类有且只有一个构造方法,在php5后虽然__construct()和

类名()可以共存,但只能使用一个。5.构造方法和普通方法一样,可以访问类属性和方法,也有访问控制修饰符,还可以被其它方法调用。5.3构造方法和析构方法•5.3.1析构方法–析构方法是PHP5中新添加的内容,它在

对象销毁之前会被自动调用,用于释放内存。其语法格式具体如下:function__destruct(){//清理操作}•需要注意的是,析构方法的名称必须为“__destruct()”,且析构方法不带任何参数。多学一招•在PHP中

使用了一种“垃圾回收”机制,即自动清理不再使用的对象,释放内存,析构方法也会自动被调用。所以在一般情况下不需要手动调用析构方法,只需明确析构方法的在何时被调用的即可。5.4类常量和静态成员•5.4.1类常量–在类中,有些属性的值不能改变,并且

希望被所有对象所共享,例如圆周率,它是一个数学常数,在数学物理计算中广泛使用,此时可以将表示圆周率的成员属性定义为常量。类常量在定义时需要使用const关键字来申明,示例代码如下:constPI=3.1415926;//定义一个常量属性PI•使用cons

t关键字来声明常量,常量名前不需要添加$符号,并且在声明的同时必须对其进行初始化工作。5.4类常量和静态成员•5.4.1类常量注意:需要注意的是,在类中定义的常量只能是基本数据类型的值,而且必须是一个定值,不能是变量、类的属

性、数学运算的结果或函数调用。类常量一旦设置后就不能改变,如果试图在程序中改变它的值,则会出现错误。且在声明类常量时一定要赋初始值,因为后期没有其它方式为其赋值。5.4类常量和静态成员•5.4.2静态

成员–静态成员也可以实现类的所有对象共享一份数据。它被static关键字修饰,不属于任何对象,只属于类。静态成员包括静态属性和静态方法,具体如下所示。1、静态属性–静态属性数据在内存中只有一份,并且可以被类的所有实例对象所共享。定义静态属性

的语法格式如下:访问修饰符static变量名•在语法格式中,static关键字写在访问修饰符的后面,访问修饰符可以省略,默认为public。5.4类常量和静态成员•5.4.2静态成员注意:需要注意的是,静态属性是属

于类而非对象,所以不能使用“对属性”的方式来访问,而应该通过“类名::属性”的方式来访问,如果是在类的内部,还可以使用self关键字代替类名。5.4类常量和静态成员•5.4.2静态成员2、静态方法–在不创建对象的情况下就可以调用某个方法,也就是

使该方法不必和对象绑在一起,可以使用静态方法。静态方法在定义时只需在方法名前加上static关键字,其语法格式如下:访问修饰符static方法名(){}•静态方法的使用规则和静态属性相同,即通过类名称和范围解析操作符(::)来访问静态

方法。5.4类常量和静态成员•5.4.2静态成员注意:在静态方法中,不要使用$this。因为静态方法是属于类的,而$this则是指对象上下文。在静态方法中,一般只对静态属性进行操作。5.5继承•5.5.1继承的概念–在程序中,

继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物。同理,波斯猫和巴厘猫继承自猫,而沙皮狗和斑点狗继承自狗。这些动物之间会形成一个

继承体系,具体如下图所示。5.5继承•5.5.1继承的概念–在PHP中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。–在程序中,如果

想声明一个类继承另一个类,需要使用extends关键字,具体语法格式如下:class子类名extends父类名{//类体}•在PHP中只能实现单继承,也就是说子类只能继承一个父类(是指直接继承)。5.5继承•5.5.2重写父类方法–在继承关系中,子类会自动继承父类中定义的方法,

但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是,在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数。–要调用父类中被重写的方法,需要使用parent关键字,由于parent关键字引用的是一个类而不是一个方法,因此

需要使用范围解析操作符(::)。注意:子类方法重写父类方法时,访问权限不能小于父类方法的访问权限。例如父类的方法是public的,在子类中重写时只能是public的。5.5继承•5.5.3final关键字–在继承的过程中要保证某些类或方法不被改变,

就需要使用final关键字。被final修饰的类和成员方法不能被修改。1、final关键字修饰类–PHP中的类被final关键字修饰后,该类将不可以被继承,也就是不能够派生子类。2、final关键字修饰方法–当一个类的方法被final关键字修饰后,这个类的子类将

不能重写该方法。5.6自动加载及魔术方法•5.6.1自动加载–从外部引入一个class,通常会使用include和require方法把定义这个class的文件包含进来。但是,在大型的开发项目中,这么做会产生大

量的require或者include方法的调用,这样不仅会降低效率,而且使代码难以维护。如果不小心忘记引入某个类的定义文件,PHP就会报告一个致命错误,导致整个应用程序崩溃。–为解决此问题,PHP提供了类的自动加载机制,定义一个__autoload()函数,它会在试图使用尚未被定义的类时自

动调用。这样,PHP在报告错误之前会有最后一个机会加载所需的类。5.6自动加载及魔术方法•5.6.1自动加载注意:需要注意的是,自动加载是指当需要类定义文件而没有找到时,会自动的调用__autoload()函数,它不只限于实例化对象,还包括继承

,序列化等操作。而且,自动加载并不能自己完成加载类的功能,它只提供了一个时机,具体的加载代码还需要用户编写代码实现。5.6自动加载及魔术方法•5.6.2魔术方法–PHP中有很多以两个下划线开头的方法,如前面介绍的__construct()、__autoload()、__get

()和__set(),这些方法被称为魔术方法。魔术方法有一个特点就是不需要手动调用,在某一时刻会自动执行,为程序的开发带来了极大的便利。–在PHP中提供了多个魔术方法,接下来列举这些常用的魔术方法,如下表所示。5.6自动加载及魔术方法•5.6.2魔

术方法方法声明功能描述__sleep()对象序列化之前被调用,使程序延缓一段时间执行__wakeup()对象反序列化时被调用,还原被序列化的对象__toString()输出一个对象时被调用,将对象转化为字符串__call()在对象中调用一个不可访问方法时会被调用__

callStatic()用静态方式中调用一个不可访问方法时被调用__clone()克隆对象时被调用__invoke()当尝试以调用函数的方式调用一个对象时被调用5.7抽象类与接口•5.7.1抽象类–当在定义一个类的时候,其中所需的某些方法暂时并不能完全定义出来,而是让其继承的类来实现,此时就

可以用到抽象类。–定义抽象类需要使用abstract关键字来修饰,语法格式具体如下:–只有方法声明而没有方法体的方法称为抽象方法,在子类继承时再来编写该方法的具体实现。其语法格式如下:abstract

class类名{//类的成员}abstractfunction方法名();5.7抽象类与接口•5.7.1抽象类注意:1.抽象类不能被实例化。2.抽象类可以没有抽象方法,但有抽象方法的抽象类才有意义。一旦类包含了抽象方法,则这个类必须声明为abstract。3.抽象类中可以有非抽象方法,成员

属性和常量。4.抽象方法不能有函数体,它只能存在于抽象类中。5.如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法,除非它自己也声明为抽象类。5.7抽象类与接口•5.7.2接口–如果一个抽象类中的所有方法都是抽象的,则可以将这个

类用另外一种方式来定义,即接口。在定义接口时,需要使用interface关键字,具体示例代码如下:–定义接口与定义类类似,但其中定义所有的方法都是空的。需要注意的是接口中的所有方法都是公有的,也不能使用final关键字来修饰。inter

faceAnimal{publicfunctionrun();publicfunctionbreathe();}•由于接口中定义的都是抽象方法,没有具体实现,需要通过类来实现接口。实现接口使用implements关键字。多学一招•在使用implements关键字实现接口的同时,还可以使用exte

nds关键字继承一个类。即在继承一个类的同时实现接口,但一定要先使用extends继承一个类,再使用implements实现接口,具体示例如下所示:•实现接口可以看作是对继承的一种补充。实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活。class类名extends父类

名implements接口1,接口2,……,接口n{//实现所有接口中的抽象方法}5.8多态–在设计一个成员方法时,通常希望该方法具备一定的通用性。例如要实现一个动物叫的方法,由于每个动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数的对

象。当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类的叫声,这种向方法中传入不同的对象,方法执行效果各异的现象就是多态。5.9抽象类与接口•5.9.1单例模式–单例模式是PHP中的一种设计模式,它是指在设计一个类

时,需要保证在整个程序运行期间针对该类只存在一个实例对象。就像世界上只有一个月亮,假设现在要设计一个类表示月亮,该类只能有一个实例对象,否则就违背了事实。–单例模式(Singleton)用于为一个类生成一个唯一的对象。5.9抽象类与接口•5.9.2工厂模式–工

厂模式的作用就是“生产”对象。工厂方法的参数是要生成对象的类名。5.10命名空间•5.10.1为什么使用命名空间–在程序开发过程中经常会涉及到大量的代码,而代码在编写时不可避免的可能会出现重名问题,当这些重名的类被调用时就会导致错误。因此在PHP语

言中提出了命名空间这一概念,来解决在编写类库或应用程序时出现的重名问题。–命名空间用于解决同名问题。同时还可以为标识符很长的名称创建别名,提高程序的可读性。5.10命名空间•5.10.2命名空间的定义–命名空间是用关键字namespace来声明,定

义一个命名空间的代码如下:–上述代码中namespace是表示命名空间的关键字,MyProject是表示命名空间名,需要注意的是命名空间的声明必须在其他所有代码之前。<?phpnamespaceMyProject;constCONNECT_OK=1;classConnect

ion{/*...*/}functionconnect(){/*...*/}?>5.10命名空间•5.10.3命名空间的使用–PHP命名空间中类名可以通过以下三种方式引用:非限定名称:即直接使用类名称,如$a=newfoo()。它表示使用的是当前命名空间的foo类。限定名称

:即在类名前面添加前缀,如$a=newsubnamespace\foo()。它表示使用的当前命名空间下子命名空间subnamespace下的foo类。完全限定名称:即在类名前面添加命名空间前缀,如果有子命名空间也要写上,如$a=new\current

namespace\foo()。它以命名空间反斜线开头的标识符,表示根命名空间下的子命名空间currentnamespace下的foo类。5.10命名空间•5.10.3命名空间的使用–命名空间除了可以用于解决命名冲突之外,还可以用来定义别名。当在程序中多次使用某个类或命名空间时,每次不得

不写一长串的单词,使程序阅读性变差。为此,PHP提供了别名机制,允许通过别名引用或导入外部的完全限定名称。–在PHP中,别名的定义是通过namespace关键字来实现的,别名的使用是通过use关键字来实现的。PHP命名空间支持两种使

用别名或导入方式,一是为类名称使用别名,二是为命名空间使用别名。5.10命名空间•5.10.3命名空间的使用–在使用别名时需要注意以下几点:使用别名机制只能导入类,不支持导入函数或常量。对命名空间的名称来说,前面的反斜杠不是必须的,因为导入的名称必须是完全限定的,它不会根据当前

的命名空间作相对解析。如果使用了反斜杠开始,则表示访问的是全局命名空间中的类。导入操作只影响非限定名称和限定名称。由于完全限定名称是确定的,所以不受导入的影响。5.10命名空间•5.10.3命名空间的使用注意:1.PHP在5.3.0以后的版本才开始支持命名空间。2.虽然任意合法的PHP代码都可以

包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。3.所有非PHP代码包括空白符都不能出现在命名空间的声明之前,下面的用法是错误的:<html><?phpnamespace

MyProject;//致命错误-命名空间必须是程序脚本的第一条语句?>本章小结•本章主要介绍了PHP面向对象程序设计的各种特性。包括面向对象编程思想、类的声明、类的组成(成员属性和成员方法)、对象的使用、静态成员、继承、自动加载、魔术方法、抽象类与接口、多态等。并简单的介绍了

设计模式和命名空间的用法。•通过本章的学习读者应该了解面向对象编程思想,重点掌握类的声明、实例化并使用对象和继承。能够初步使用面向对象的方式来开发Web应用程序。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?