【ch09】PHP面向对象编辑_第1页
【ch09】PHP面向对象编辑_第2页
【ch09】PHP面向对象编辑_第3页
【ch09】PHP面向对象编辑_第4页
【ch09】PHP面向对象编辑_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章Web程序设计PHP面向对象编辑新工科建设之路·计算机类专业系列教材01类与对象01类与对象正所谓“物以类聚,人以群分”。世间万物都具有其自身的属性和方法,通过这些属性和方法可以将不同物质区分开。现实世界与计算机世界中类和对象的定义关系如图9-1所示。1.类的定义01类与对象在现实世界中,类是一组具有相同属性和行为的对象的抽象。类与对象之间的关系是抽象与具体的关系。类是对多个对象进行综合抽象的结果,对象又是类的个体实物,一个对象是类的一个实例。在面向对象程序设计中,类就是具有相同的数据和相同的操作(函数)的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。2.对象的由来类与对象的关系为:对象是类的实例,类是对象的模板。3.类与对象的关系01类与对象面向对象编程的3个重要特点是:继承性、封装性和多态性,迎合了编程中注重代码重用性、灵活性和可扩展性的需要,奠定了面向对象在编程中的地位。①封装性:将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。②继承性:派生类(子类)自动继承一个或多个基类(父类)中的属性和方法,并可以重写或添加新的属性或方法,简化了对象和类的创建,增加了代码的可重用性。③多态性:指同一个类的不同对象,使用同一个方法可以获得不同的结果。4.面向对象的特点02类的声明02类的声明01类的定义类的语法格式如下:其中,权限修饰符是可选项,可以使用public、protected、private或省略三者;class是创建类的关键字;类名是要创建的类的名称,必须写在class关键字后,在类的名称后必须跟上一对“{}”;类体是类的成员,类体必须放在类名后的“{}”之间。02类的声明02成员属性成员变量就是类中的变量,主要用于存储数据信息。在类中直接声明的变量被称为成员属性(或成员变量),可以在类中声明多个变量,即对象中有多个成员属性,每个变量存储对象的不同属性信息。成员属性的类型可以是PHP中的标量类型和复合类型,如果使用资源和空类型是没有意义的。定义成员变量的语法格式如下:02类的声明03成员方法在类中声明的函数称为成员方法。一个类中可以声明多个函数,即对象中可以有多个成员方法。成员方法的声明和函数的声明是相同的,唯一特殊之处是,成员方法可以用关键字来修饰,控制成员方法的权限。声明成员方法的语法格式如下:在类中,成员属性和成员方法的声明都是可选的,二者可以同时存在,也可以单独存在。具体应该根据实际的需求来定。03类的实例化03类的实例化01创建(实例化)对象构造方法是在创建对象时第一个被对象自动调用的方法,存在于每个声明的类中,是一个特殊的成员方法。如果在类中没有直接声明构造方法,那么类中会默认生成一个没有任何参数且内容为空的构造方法。在PHP中,构造方法的声明有两种情况:第一种在PHP5以前的版本中,构造方法的名称必须与类名相同;第二种在PHP5的版本中,构造方法的名称必须是以两个下画线开始的“_construct()"(中间没有空格)。1.构造方法03类的实例化01创建(实例化)对象2.析构方法析构方法是在对象销毁时被自动调用的,用于完成对象在销毁前的清理工作。因此析构方法的作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。析构方法的声明格式与构造方法类似,都是以两个下画线开头的“_destruct”,

析构函数没有任何参数,其语法格式如下:04面向对象的封装性04面向对象的封装性面向对象编程的特点之一是封装性,类的封装是对属性和方法的访问控制(不是拒绝访问),将类中的成员属性和成员方法结合成一个独立的相同单位,并尽可能隐藏对象的内容细节,目的是确保类以外的部分不能随意存取类的内部数据(成员属性和成员方法),从而有效避免外部错误对类内数据的影响。使用者只能通过类提供的公共方法来实现对内部成员的访问和操作,而不能直接访问对象内部成员,从而可以增强程序的安全性。04面向对象的封装性01静态属性和静态方法1静态属性静态属性就是通过关键字static修饰的成员属性,属于类本身而不属于类的任何实例对象,相当于存储在类中的全局变量,可以在任何位置通过类来访问。静态属性访问的语法格式如下:静态方法静态方法就是通过关键字static修饰的成员方法。由于它不受任何对象的限制,因此可以不通过类的实例化直接引用类中的静态方法。静态方法引用的语法格式如下:205

面向对象的继承性05面向对象的继承性01类的继承:extends关键字类的继承是类与类之间的一种关系的体现。子类不仅有自己的属性和方法,还有父类的所有属性和方法。在PHP中,类的继承通过extends关键字实现,其语法格式如下:子类继承了父类中的属性和方法,也可以添加新的属性和方法。05面向对象的继承性02类的继承:parent::关键字通过parent::关键字也可以在子类中调用父类中的成员方法,其语法格式如下:05面向对象的继承性03覆盖父类方法在继承关系中,有时从父类继承下来的方法不能完全满足子类的需要,可以采用覆盖父类的方法,也就是使用子类中的方法将从父类中继承的方法进行替换。覆盖父类方法又称方法的重写。覆盖父类方法的关键就是在子类中创建与父类中相同的方法,包括方法名称、参数和返回值类型。注意:当父类和子类中都定义了构造方法时,并且子类的对象被创建后,将调用子类的构造方法,而不会调用父类的构造方法。05面向对象的继承性04final关键字虽然继承可以实现代码重用,但有时可能要求某个类不能被继承或某个类中的方法不能被重写,这时就需要使用final关键字,可以修饰类或类中的成员方法。被final关键字修饰过的类和成员方法就是“最终的版本”。如果一个类的格式如下:说明该类不可以被继承,也不能有子类。06

抽象类和接口06抽象类和接口01抽象类类中可以定义不含方法体的成员方法,该类的子类可以根据实际需求实现方法体,这样的成员方法称为抽象方法。抽象方法使用abstract关键字修饰。包含抽象方法的类必须是抽象类,抽象类也使用abstract关键字修饰。抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类使用abstract关键字来声明,其语法格式如下:06抽象类和接口02接口接口通过interface关键字来声明,接口中声明的方法必须是抽象方法,接口中不能声明变量,只能使用const关键字声明常量的成员属性,并且接口中的所有成员都必须具备public的访问权限。接口声明的语法格式如下:接口中的所有方法都是抽象方法,因此方法名前就不需要使用abstract关键字修饰了。与抽象类相似,接口中也包含抽象方法。因此,接口和抽象类都不能进行实例化的操作,也需要通过子类来实现。但是接口可以直接使用接口名称在接口外获取常量成员的值。1.接口的声明06抽象类和接口02接口因为接口不能进行实例化的操作,所以要使用接口中的成员,就必须借助子类。在子类中继承接口使用implements关键字。如果实现多个接口的继承,那么每个接口之间用连接。PHP中一个类只能有一个父类,但一个类可以有多个接口。2.接口的应用注意既然通过子类继承了接口中的方法,那么接口中的所有方法必须都在子类中实现,否则PHP将抛出错误信息。07

面向对象的魔术方法07面向对象的魔术方法01se()方法和_get()方法set()方法和_get()方法对私有成员进行赋值或获取值的操作。_set()方法:

在程序运行过程中为私有的成员属性设置值,不需要任何返回值,包含两个参数,分别表示变量名称和变量值,这两个参数不可省略。set()方法不需要主动调用,可以在方法前加上private关键字修饰,防止用户直接调用。_get()方法:在程序运行过程中,在对象的外部获取私有成员属性的值,有一个必选参数,即私有成员属性名,返回一个允许对象在外部使用的值。_get()方法同样不需要主动调用,可以在方法前加上private关键字,防止用户直接调用。07面向对象的魔术方法02isset()方法和___unset()方法如果在对象中存在_isset()方法,当在类的外部使用isset()方法检测对象中的私有成员属性时,就会自动调用类中的__isset()方法完成对私有成员属性的检测操作,其语法格式如下:unset()方法的作用是删除指定的变量,其参数为要删除的变量名称。在面向对象中,unset()方法可以对公有的成员属性进行删除操作,但是对于私有的成员属性,就必须在_unset()方法的帮助下才能够完成删除操作。07面向对象的魔术方法03_call()方法如果通过对象调用未定义的成员方法时,程序会报错并退出;如果在类中添加call()方法,程序会自动调用_call()方法并继续往下执行。_call()方法的作用是:当程序试图调用不存在或不可见的成员方法时,PHP会先调用_call()方法来存储方法名及其参数。_call()方法包含两个参数,即方法名和方法参数。其中,方法参数是以数组形式存在的。07面向对象的魔术方法04toString()方法如果程序直接使用echo输出一个对象,就会出现错误。如果在类中添加了__toString()方法,程序输出对象时就不会出现错误。__toString()方法的作用是:当使用echo或print输出对象时,将对象转化为字符串。注意:①如果没有_toString()方法,直接输出对象将会发生致命错误(fatalerror)。②输出对象时应注意,echo()或print()后直接跟要输出的对象,中间不要加多余的字符,否则_toString()方法不会被执行。07面向对象的魔术方法05clone()方法克隆对象对象的克隆可以通过clone关键字来实现。使用clone关键字克隆的对象与原对象没有任何关系,它是将原对象从当前位置重新复制了一份,相当于在内存中新开辟了一个空间。使用clone关键字克隆对象的语法格式如下:12克隆副本对象的初始化_clone()方法可以将克隆后的副本对象初始化,不需要任何参数,其中包含$this和Sthat两个对象的引用,$this是对副本对象的引用,$that则是对原本对象的引用。08

两种常见的设计模式08两种常见的设计模式单例模式是指一个类在程序运行期间有且仅有一个实例,并且自行实例化向整个系统提供这个实例。单例设计模式常应用于数据库类设计,采用单例模式只能连接一次数据库,防止打开多个数据库连接,避免进行大量的new操作而消耗内存资源。单例类应具备以下特点:单例类不能直接实例化创建,只能由类本身实例化。在PHP中,为了防止他人对单例类实例克隆,通常还为其提供一个空的私有_clone()方法。单例模式的使用场景如下:①要求生产唯一序列号;②Web中的计数器不用每次刷新都在数据库里加一次,先用单例缓存;③创建一个对象需要消耗的资源过多,如I/O与数据库的连接等。1.单例模式08两种常见的设计模式单例模式具有如下特点。①$_instance必须声明为静态的私有变量。②构造函数和析构函数必须声明为私有,防止外部程序new类操作失去单例模式。③getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用。④操作符“.:”只能访问静态变量和静态函数。⑤new对象都会消耗内存。⑥常用的地方是数据库连接。⑦使用单例模式生成一个对象后,该对象可以被其他众多对象使用。⑧私有的_clone()方法防止克隆对象。⑨单例模式仅允许创建一个某个类的对象。1.单例模式08两种常见的设计模式工厂模式主要用来实例化有共

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论