PHP入门第18章面向对象编程.ppt_第1页
PHP入门第18章面向对象编程.ppt_第2页
PHP入门第18章面向对象编程.ppt_第3页
PHP入门第18章面向对象编程.ppt_第4页
PHP入门第18章面向对象编程.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

面向对象编程 类的声明 类的声明是类应用的前提条件,只有在创建了类、属性和方法之后,才可以实现类 的实例化,调用类中方法实现某个封装的功能。所以类的声明是一切操作的源泉。这里主要 讲解以下内容: (1)类的定义 (2)成员属性 (3)成员方法 类的定义 类的定义主要是通过class关键字加类名来实现的。类的格式如下: 权限修饰符是可选项,可以使用public、protected、private或者省 略这3者; class是创建类的关键字; 类名是所要创建类的名称,必须写在class关键字之后,在类的名称后面 必须跟上一对大括号; 类体是类的成员,类体必须放在类名后面的两个大括号“”和“”之间。 类的定义实例 例如:创建一个ConnDB类。代码如下: 注意:虽然ConnDB类仅有一个类的骨架,什么功能都没有实现,但这 并不影响它的存在。一个类即一对大括号之间的全部内容都要在一段代 码段中,不允许将类中的内容分割成块,例如: 这种格式是不允许的。 成员属性 u概念:在类中直接声明的变量称为成员属性(也可以称为成 员变量),可以在类中声明多个变量,即对象中有多个成员属性 ,每个变量都存储对象不同的属性信息。 u类型:成员属性的类型可以是PHP中的标量类型和复合类型, 但是如果使用资源和空类型是没有意义的。 u成员属性的声明:成员属性的声明必须有关键字来修饰,例 如:public、protected、private等,这是一些具有特定意义的 关键字。如果不需要有特定的意义,那么可以使用var关键字来 修饰。还有就是在声明成员属性时没有必要赋初始值。 成员属性的实例 下面再次创建ConnDB类并在类中声明一些成员属 性,其代码如下: class ConnDB var $dbtype; var $host; var $user; var $pwd; var $dbname; var $debug; var $conn; 成员方法 n概念:在类中声明的函数称为成员方法。一个类中可以声明 多个函数,即对象中可以有多个成员方法。 n成员方法的声明:成员方法的声明和函数的声明是相同,唯 一特殊之处是成员方法可以有关键字来对它进行修饰,控制成员 方法的权限。 声明成员方法的代码 声明成员方法的代码如下: class ConnDB function ConnDB() function GetConnId() function CloseConnId() $this-conn-Disconnect(); 类的实例化 类创建成功后是远远不够的,只有在经过了实例化之后,在可以调用类中的方法完 成指定的操作。这里主要讲解有关类的实例化的一些方法: (1)创建对象 (2)访问类中成员 (3)特殊的访问方法“$this”和“:” (4)构造方法和析构方法 创建对象 类的实例化格式如下: $变量名=new 类名称(参数); p$变量名:类实例化返回的对象名称,用于引用类 中的方法。 pnew:关键字,表明要创建一个新的对象。 p类名称:表示新对象的类型。 p参数:指定类的构造方法用于初始化对象的值。如 果类中没有定义构造函数,PHP会自动创建一个不带 参数的默认构造函数。 创建对象的实例 例如:这里对上面创建的ConnDB类进行实例化。其代码如下: class ConnDB function ConnDB() /方法体 function GetConnId() /方法体 function CloseConnId() $this-conn-Disconnect(); $connobj1=new ConnDB(); $connobj2=new ConnDB(); $connobj3=new ConnDB(); 访问类中的成员 在类中包括成员属性和成员方法,访问类中的成员包括成员 属性和方法的访问。访问方法与访问数组中的元素类似,需要通 过对象的引用来访问类中的每个成员。其中还要应用到一个特殊 的运算符号“-”。访问类中成员的语法格式如下: $变量名=new 类名称(参数); $变量名-成员属性=值; $变量名-成员属性; $变量名-成员方法; 特殊的访问方法“$this”和“:” 1$this $this存在于类的每个成员方法中,它是一个特殊的对象引用 方法。成员方法属于哪个对象,$this引用就代表哪个对象,其 作用就是专门完成对象内部成员之间的访问。 2操作符“:” 相比$this引用只能在类的内部使用,操作符“:”才是真正的 强大。操作符“:”可以在没有声明任何实例的情况下访问类中的 成员。例如:在子类的重载方法中调用父类中被覆盖的方法。操 作符“:”的语法格式如下: 关键字:变量名/常量名/方法名 这里的关键字分为3种情况: parent关键字:可以调用父类中的成员变量、成员方法和常量。 self关键字:可以调用当前类中的静态成员和常量。 类名:可以调用本类中的变量、常量和方法。 构造方法和析构方法 1构造方法 概述:构造方法是对象创建完成后第一个被对象自动调用的方法。它 存在于每个声明的类中,是一个特殊的成员方法,如果在类中没有直接 声明构造方法,那么类中会默认生成一个没有任何参数且内容为空的构 造方法。 声明方法: (1)第一种在PHP5以前的版本中,构造方法的名称必须与类名相同; (2)第二种在PHP5的版本中,构造方法的方法名称必须是以两个下划 线开始的“_construct()”。语法格式如下所示: function _construct(mixed args ,) /方法体 说明:在PHP中,一个类只能声明一个构造方法。在构造方法中可以使用默认参 数,实现其他面向对象的编程语言中构造方法重载的功能。如果在构造方法中没 有传入参数,那么将使用默认参数为成员变量进行初始化。 构造方法和析构方法 2析构方法 概念:析构方法的作用和构造方法正好相反,是对象被销毁之前最后一 个被对象自动调用的方法。它是PHP5中新添加的内容,实现在销毁一 个对象之前执行一些特定的操作,诸如关闭文件,释放内存等等。 声明方法: 析构方法的声明格式与构造方法类似,都是以两个下划线开头的 “_destruct”,析构函数没有任何参数。其语法格式如下: function _destruct() /方法体,通常是完成一些在对象销毁前的清理任务 注意:在PHP中,有一种“垃圾回收”机制,可以自动清除不再使用的对 象,释放内存。而析构方法就是在这个垃圾回收程序执行之前被调用的 方法,在PHP中它属于类中的可选内容。 面向对象的封装特性 面向对象的封装特性,将类中的成员属性和方法结合成一个独立的相同单位,并尽 可能隐藏对象的内容细节。其目的就是确保类以外的部分不能随意存取类的内部数据(成员 属性和成员方法)。从而有效避免外部错误对类内数据的影响。 类的封装是通过关键字public、private、protected、static和final来实现的。下 面对其中的public、private和protected关键字进行详细讲解。 public(公共成员) 可以公开的、没有必要隐藏的数据信息。可以在程序的任何地点(类内、类外)被其他 的类和对象调用。子类可以继承和使用父类中所有的公共成员。 private(私有成员) 被private关键字修饰的变量和方法,只能在所属类的内部被调用和修改,不可以在类 外被访问,即使是子类中也不可以。 protected(保护成员) private关键字可以将数据完全隐藏起来,除了在本类外,其他地方都不可以调用,子 类也不可以。但对于有些变量希望子类能够调用,但对另外的类来说,还要做到封装。这时 ,就可以使用protected。被protected修饰的类成员,可以在本类和子类中被调用,其他地 方则不可以被调用。 面向对象的继承特性 面向对象的继承特性,使一个类继承并拥有另一个已存在类的成员属性和成员方法 ,其中被继承的类称为父类,继承的类称为子类。通过继承能够提高代码的重用性和可维护 性。 类的继承extends关键字 类的继承是类与类之间的一种关系的体现。子类不仅有自己的属性和方法,而且还拥有父 类的所有属性和方法,正所谓子承父业。在PHP中,类的继承通过关键字extends实现,其语 法格式如下: class 子类名称 extends 父类名称 function 成员方法() /方法体 /省略其他方法 类的继承parent:关键字 通过parent:关键字也可以在子类中调用父类中的成员方法,其语法格式如下: parents: 父类的成员方法(参数); 覆盖父类方法 所谓覆盖父类方法,也就是使用子类中的方法将从父类中继承的方法进行替换,也叫方法 的重写。覆盖父类方法的关键就是在子类中创建与父类中相同的方法,包括:方法名称、参 数和返回值类型。 抽象类和接口 抽象类(Abstract)和接口(Interface)属于不能被实例化的特殊类。它们都是配 合面向对象的多态性一起使用。本节将对抽象类、接口的声明和使用方法进行讲解。 (1)抽象类 概述:抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。 抽象类的声明:抽象类使用abstract关键字来声明,其语法格式如下: abstract class 抽象类名称 abstract function 成员方法1( 参数 ); abstract function 成员方法2( 参数 ); 抽象类与抽象方法: 抽象类和普通类相似,包含成员变量、成员方法。两者的区别在于,抽象类至少要包含 一个抽象方法。抽象方法没有方法体,其功能的实现只能在子类中完成。抽象方法也是使用 abstract关键字来修饰。 注意:在抽象方法后面要有分号“;”。 抽象类和抽象方法主要应用于复杂的层次关系中,这种层次关系要求每一个子类都包含 并重写某些特定的方法 抽象类和接口 (2)接口 概述:继承特性简化了对象、类的创建,增加了代码的可重性。但PHP只支持单继承。如果 想实现多重继承,就要使用接口。PHP可以实现多个接口。 接口的声明 接口类通过interface关键字来声明,接口中声明的方法必须是抽象方法,接口中不能声明 变量,只能使用const关键字声明为常量的成员属性,并且接口中所有成员都必须具备 public的访问权限。接口声明的语法格式如下: interface 接口名称 常量成员 抽象方法; 接口和抽象类相同都不能进行实例化的操作,也需要通过子类来实现。但是接口可以直接使 用接口名称在接口外去获取常量成员的值。 抽象类和接口 例如:下面声明一个One接口,其代码如下: interface One const CONSTANT=CONSTANT value; function FunOne(); 接口之间也可以实现继承,同样需要使用extends关键字。 例如:下面声明一个Two接口,通过extends关键字继承One。 其代码如下: interface Two extends One function FunTwo(); 抽象类和接口 接口的应用 因为接口不能进行实例化的操作,所以要使用接口中的成员,那么就必须借助子类。在子类 中继承接口使用implements关键字。如果要实现多个接口的继承,那么每个接口之间使用 逗号“,” 连接。 面向对象的多态性 面向对象的多态性,是指一段程序能够处理多种类型对象的能力。例如,在介绍面 向对象特点时举的火车和汽车的例子,虽然火车和汽车都可以移动,但是它们的行为是不同 的,火车要在铁轨上行驶,而汽车则在公路上行驶。下面将介绍多态的两种实现方法: (1)通过继承实现多态 (2)通过接口实现多态 面向对象的关键字 在面向对象中提供了很多的关键字,通过这些关键字可以对类中的成员、方法、属 性和变量进行修饰,以此实现特定的操作。本节中将介绍面向对象中的3个常用关键字: (1)final关键字 final,中文含义是最终的、最后的。被final修饰过的类和方法就是“最终的版本”。如 果有一个类的格式为: final class class_name / 说明该类不可以再被继承,也不能再有子类。如果有一个方法的格式为: final function method_name() 说明该方法在子类中不可以进行重写,也不可以被覆盖。这就是final关键字的作用。 (2)static关键字声明静态类成员 在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法。静 态属性和静态方法不需要在被类实例化的情况下就可以直接使用 面向对象的关键字 1静态属性 静态属性就是使用关键字static修饰的成员属性,它属于类本身而不属于类 的任何实例。它相当于存储在类中的全局变量,可以在任何位置通过类来访问。 静态属性访问的语法如下: 类名称:$静态属性名称 其中的符号“:”被称为范围解析操作符,用于访问静态成员、静态方法和常 量,还可以用于覆盖类中的成员和方法。 如果要在类内部的成员方法中访问静态属性,那么在静态属性的名称前加上 操作符“self:”即可。 2静态方法 静态方法就是通过关键字static修改的成员方法。由于它不受任何对象的限 制,所以可以不通过类的实例化直接引用类中的静态方法。静态方法引用的语法 如下: 类名称:静态方法名称(参数1,参数2,) 同样如果要在类内部的成员方法中引用静态方法,那么也是在静态方法的名 称前加上操作符“self:”。 注意:在静态方法中,只能调用静态变量,而不能调用普通变量,而普通方法则 可以调用静态变量。 使用静态成员,除了可以不需要实例化对象,另一个作用就是在对象被销毁后,仍然保存 被修改的静态数据,以便下次继续使用。 (3)clone关键字克隆对象 1克隆对象 对象的克隆可以通过关键字clone来实现。使用clone克隆的对象与原对象没有任何关系 ,它是将原对象从当前位置重新复制了一份,也就是相当于在内存中新开辟了一块空间。 clone关键字克隆对象的语法格式如下: $克隆对象名称=clone $原对象名称; 对象克隆成功后,它们中的成员方法、属性以及值是完全相同的。如果要为克隆后的副本 对象在克隆时重新为成员属性赋初始值,那么就要使用到下面将要介绍的魔术方法 “_clone()”。 2克隆副本对象的初始化 魔术方法“_clone()”可以为克隆后的副本对象重新初始化。它不需要任何参数,其中 自动包含$this和$that两个对象的引用,$this是副本对象的引用,$that则是原本对象的引 用。 面向对象的魔术方法 所谓面向对象的魔术方法,就是在PHP中以两个下划线开头的方法。本节中将对其中 的常用方法进行介绍,其内容包括: (1)_set()和_get()方法 _set()和_get()方法对私有成员进行赋值或者获取值的操作。 _set()方法: 在程序运行过程中为私有的成员属性设置值,它不需要任何返回值。_set()方法包 含两个参数,分别表示变量名称和变量值。两个参数不可省略。这个方法不需要主动调用, 可以在方法前加上private关键字修饰,防止用户直接去调用。 _get()方法: 在程序运行过程中,在对象的外部获取私有成员属性的值。它有一个必要参数,即私 有成员属性名,它返回一个

温馨提示

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

评论

0/150

提交评论