PHP网站开发项目式教程任务课件12_第1页
PHP网站开发项目式教程任务课件12_第2页
PHP网站开发项目式教程任务课件12_第3页
PHP网站开发项目式教程任务课件12_第4页
PHP网站开发项目式教程任务课件12_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、任务十二 PHP面向对象PHP是同时支持面向过程和面向对象的编程方式,PHP 开发者可以在面向过程和面向对象二者中自由选择其一或是混合使用,面向过程开发周期短、发布快、效率较高;面向对象开发周期长、效率较低,但易于维护、改进、扩展和开发API。在PHP开发中,很难说哪一个方式会更优秀,只能在开发过程中尽量发挥出两种编程方式各自的优势。12.2.1 类的创建与实例化1.定义类PHP面向对象中定义类的简单语法如下:修饰符 class 类名 零到多个属性 零到多个方法每个类的定义都以关键字 class 开头,后面依次跟着类名,和一对花括号,花括号里面包含着类的属性与方法的定义。2.类的实例化与访问在

2、声明一个类之后,类只存在于文件中,程序不能直接调用。需要对该类创建一个对象后,程序中才可以使用,创建一个类对象的过程称为类的实例化。类的实例化需要使用new关键字,关键字后面需要指定实例化的类名,格式为:$obj = new classname;注意:对类进行实例化时,如果需要传递参数,则类名后面必须要圆括号,如果没有参数,加括号或者不加括号效果都相同。12.2.2 类的访问控制类的访问控制是指对属性或方法的访问控制,是通过在前面添加关键字 public(公有)、protected(受保护)或 private(私有)来实现的。public:被定义为公有的类成员可以在类的外部或内部进行访问。pr

3、otected:被定义为受保护的类成员则可以被其自身以及其子类和父类访问。private:被定义为私有的类成员则只能被其定义所在的类访问,即私有成员将不会被继承。属性必须定义为公有、受保护、私有之一。如果用 var 定义,则被视为公有,可以将var看做是public关键字的一个别名形式。12.2.3 静态属性和方法在类中还可以定义静态的属性和方法,所谓“静态”是指所定义的属性和方法与类的实例无关,只与类本身有关。静态的属性和方法一般用来包含类要封装的数据和功能,可以由所有类的实例共享。在类中可以使用static关键字定义静态属性和方法。访问静态属性和方法时,需要使用范围解析符“:”,格式如下:

4、classname:$attribute; /访问静态属性classname:Cfunction();/访问静态方法12.2.4 构造函数和析构函数构造函数是类中的一个特殊函数,当创建一个类的实例时,构造函数将被自动调用,主要功能是对类中的对象完成初始化工作。与构造函数相对的是析构函数,析构函数在类的对象被销毁时自动调用。1.构造函数PHP4中,在类的内部与类同名的函数都被认为是构造函数,在创建类的对象时被自动执行。PHP5以及之后的版本,构造函数用_construct() 方法来声明(注意,construct前面是两条下划线),这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要修

5、改相应的构造函数名称了。在PHP5及以后的版本中,为了向下兼容,如果一个类中没有名为_construct() 的方法,PHP将搜索一个与类名同名的方法作为构造方法。如果_construct() 方法和与类名同名的方法同时存在,优先将_construct() 作为构造方法。2.析构函数类的析构函数是“_destruct()”,析构函数不能使用参数。若是在类中声明了该函数,PHP将在对象被销毁前调用该函数,将对象从内存中销毁,节省服务器资源。12.2.5 类的继承1.子类访问父类在PHP中,允许通过继承其它类的方式来调用这些类中已经定义的属性和方法。PHP不支持多继承,因此一个子类只能继承一个父类

6、。可以使用extends关键字来指明类与类之间的继承关系,格式为:class Subclass extends Parclass其中Subclass表示子类,Parclass表示父类。子类可以继承父类中的构造函数,也可以定义自己的构造函数。若要在子类内部调用父类的方法,除了使用“$this-”之外,还可以使用“parent:”或者“父类名称:”形式;而对于父类中的属性,在子类中只能使用“$this-”形式进行访问。12.2.6 抽象类和接口1.抽象类抽象类是PHP5开始引入的新特性,它是一种特殊的类,使用关键字abstract定义,不能被实例化。一个抽象类中至少包含一个抽象方法,抽象方法也是由

7、abstract关键字定义。抽象方法只提供方法的声明,不提供方法的具体实现。例如:abstract function func($name, $num);包含抽象方法的类必须是抽象类。抽象类只能通过继承来使用。继承抽象类的子类,必须重载抽象类中的所有抽象方法才能被实例化。2.接口PHP只能进行单继承,即一个类只能有一个父类。当一个类需要继承多个类的功能时,单继承将无法实现。为了解决这个问题,从PHP5开始引入了接口的概念。接口是通过 interface 关键字而不是class关键字来定义的,就像定义一个标准的类一样,但其中定义的所有方法都是空的。接口中定义的所有方法都必须是公有方法,这是接口的

8、特性。另外,接口中不能使用属性,但可以使用const关键字定义常量。接口也支持继承,接口之间的继承也使用关键字extends。定义了接口之后,可以将其实例化,接口的实例化称为接口的实现。要实现一个接口需要一个子类来实现接口中所有的抽象方法。定义接口的子类必须使用关键字implements。一个子类可以实现多个接口,通过这种形式即可解决多继承的问题。12.2.7 类的魔术方法PHP规定以两个下划线“_”开头的方法都保留为魔术方法,所以在定义函数名时尽量不要使用“_”开头,除非是为了重载已有的魔术方法1.克隆对象PHP使用clone关键字建立一个与原对象拥有相同属性和方法的对象,若需要改变这些属性

9、,可以使用PHP提供的魔术方法_clone(),这个方法在克隆一个对象时将被自动调用。2.方法重载魔术方法_call() 可以用于实现方法的重载。使用该方法的格式为:function _call(arg1, arg2)参数说明:参数arg1,表示被调用的方法名称;参数arg2,表示传递给该方法的参数数组。若对象访问类中不存在的方法时,_call()方法将被调用。3.访问类的属性通常情况下为了实现类的封装,将类的属性定义为private私有的,此时从类的外部直接访问类的私有属性是不允许的。因此,在PHP中定义了两个魔术方法,_set() 和_get(),在读取一个不存在的属性时,会自动调用方法_

10、set() 和_get()。_set() 方法需要两个参数,分别是将要被设置的属性名称和取值,_get() 方法只需要属性名称一个参数,该方法会返回属性的值。4.字符串转换由类创建的对象,其数据类型是对象,不能直接使用print或者echo语句输出。要输出对象时,可以在类中定义一个_toString() 方法,在方法中返回一个可输出的字符串。5.自动加载对象_autoload() 方法用于自动加载对象,它不是一个类方法,而是一个单独的函数。如果脚本中定义了_autoload() 函数,当使用new关键字实例化一个没有声明的类时,这个类的名字将作为参数传递给_autoload() 函数,函数根据参数自动包含含有类的文件,并加载类文件中的同名类。6.对象序列化对象序列化是指将一个对象转换成字节流的形式,将序列化后的对象在一个文件或网络中传输,然后再反序列化还原为原数据。对象序列化使用函数serialize() 进行,反序列化使用函数unserialize()

温馨提示

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

评论

0/150

提交评论