1、第第6 6章章 PHP PHP面向对象编程面向对象编程 主要内容主要内容面向对象编程的基础知识PHP5中面向对象编程的基本技术 PHP5中面向对象编程的高级技术 6.16.1 面向对象编程的基础知识面向对象编程的基础知识 面向对象编程的基本概念 对象u一个面向对象的应用程序由一系列相关对象构成。u对象是封装了属性与方法的实体。u属性,对象的静态特征。u方法,对象的动态行为。类u具有相同特征与操作的一组对象的描述与定义。u构造对象的模板或蓝本。u一个具体对象则是相应类的一个实例。u类和对象的关系,类似于数据类型与变量的关系。u类的属性与方法统称为类的成员。u基于类的每一个对象,都包含类的方法,但
2、属性取值可能不同。面向对象编程的主要特征 封装性,属性与方法置于对象之中,主要目的实现对象的数据隐藏和数据保护,并为对象提供接口。u访问对象的数据,只能通过操作实现。u有效隐藏对象内部细节,实现对象的相对独立性。u类也适用于封装性。u封装性是结构化编程技术的逻辑延伸。继承性,从一个类派生出另外一个或多个新类。u父类,被继承的类。u子类,通过继承派生的类。多态性,同名方法的功能随对象类型或参数定义不同而有所不同。u实现方法重载,对类中已有方法重新定义。u对某类对象,调用多态方法时所传递的参数或参数个数不同,该方法实现的功能或过程也会不同。6.2 6.2 PHPPHP面向对象编程的基本技术面向对象
3、编程的基本技术 6.2.1类的创建6.2.2对象的使用6.2.3构造函数的使用6.2.4析构函数的使用6.2.5类属性的访问控制6.2.6类方法的访问控制6.2.1 6.2.1 类的创建类的创建使用关键字class最简单的类-空类 class classname 类的基本格式属性:var方法:function在类的方法中,可以访问类自身的有关属性u格式:$this-propertyname$this特殊变量,指向当前类本身。-,PHP运算符,用于访问属性和方法。访问属性时,属性前无需加$。【例6.1】类的创建示例xh=$xh;$this-xm=$xm;$this-xb=$xb;/输出学生信息
4、function getinfo()echo 学号:$this-xh.;echo 姓名:$this-xm.;echo 性别:$this-xb.;?6.2.2 6.2.2 对象的使用对象的使用对象是类的实例创建对象,实例化一个类$objectname=new classname;访问对象的属性与方法$objectname-propertyname$objectname-methodname(.)销毁对象$objectname=NULL;【例【例6.26.2】对象的使用示例】对象的使用示例setinfo(200600001,卢铭,男);$MyStudent-getinfo();/调用方法(输出学生
5、信息)$MyStudent-xm=卢俊;/访问属性(修改学生姓名)echo 姓名:.$MyStudent-xm;/访问属性(输出学生姓名)$MyStudent=NULL;/销毁对象?6.2.3 6.2.3 构造函数的使用构造函数的使用构造函数是类中的一个特殊函数(或特殊方法),可在创建对象时自动地加以调用。类中与类同名的函数,构造函数。初始化任务,属性初值,创建其他对象。u在PHP5中,构造函数的名称则是固定的,即必须为_construct。【例6.3】构造函数的使用示例。xh=$xh;$this-xm=$xm;$this-xb=$xb;function getinfo()/输出学生信息 ec
6、ho 学号:$this-xh.;echo 姓名:$this-xm.;echo 性别:$this-xb.;$MyStudent=new student(200600001,卢铭,男);/创建学生对象$MyStudent-getinfo();/调用方法(输出学生信息)$MyStudent-xm=卢俊;/访问属性(修改学生姓名)echo 姓名:.$MyStudent-xm;/访问属性(输出学生姓名)$MyStudent=NULL;/销毁学生对象?6.2.4 6.2.4 析构函数的使用析构函数的使用析构函数,一个特殊函数。u在销毁对象时被自动调用。u在PHP5中,则可以使用析构函数,且其名称是固定的,
7、即必须为_destruct。u析构函数不能带任何参数。【例【例6.46.4】析构函数的使用示例】析构函数的使用示例xm=$xm;echo 学生xm.来啦!;function _destruct()/析构函数 echo 学生xm.走了!;$MyStudent=new student(李兵);/创建学生对象$MyStudent=NULL;/销毁学生对象?6.2.56.2.5 类属性的访问控制类属性的访问控制使用访问控制关键字publicprivateprotected【例6.5】类属性的访问控制示例。【例6.6】_get()函数与_set()函数的使用示例。6.2.6 6.2.6 类方法的访问控制
8、类方法的访问控制使用访问控制关键字publicprivateprotected【例6.7】类方法的访问控制示例。6.3 6.3 PHP PHP面向对象编程高级技术面向对象编程高级技术 6.3.1类的继承6.3.2方法的重载6.3.3对象的克隆与串行化6.3.4静态成员的使用6.3.5抽象方法与抽象类的使用6.3.6接口的使用6.3.7类方法的调用处理6.3.8类文件的调用处理6.3.1 类的继承继承是面向对象编程的主要特征单重继承,一个子类只能有一个父类子类继承父类的属性和方法父类的private属性和方法不能被继承 定义新的属性和方法重新定义父类的同名属性重新定义父类的同名方法使用关键字ex
9、tends基本格式:【例6.8】类的继承示例。parent:methname(.);【例6.9】类的继承示例。final class student_a,不能被继承。6.3.2 6.3.2 方法的重载方法的重载多态是面向对象的主要特征所谓重载,子类重新定义父类的同名方法【例6.10】方法的重载示例。【例6.11】方法的重载示例。final不允许重载6.3.36.3.3 对象的克隆对象的克隆 为已存在的对象建立副本副本与原对象具有相同属性与方法也可以改变原对象的某些属性克隆函数:_clone。【例6.12】对象的克隆示例。6.3.4 6.3.4 对象的串行化对象的串行化对象的串行化指将对象转化为
10、一个字符串对象的反串行化指将串行化字符串还原为原来的对象串行化与反串行化,实现对象的保存和传输对象串行化,serialize(),参数为对象名,返回值为对象被串行化后的字符串对象的反串行化,unserialize(),参数为对象的串行化字符串,返回值为重新组织好的对象名SLEEP(),包含被串行化的所有属性的数组,关闭数据库连接WAKEUP(),设置属性,重建数据库连接【例6.13】对象的串行化与反串行化示例。6.3.5 6.3.5 静态成员的使用静态成员的使用 使用关键字static来进行声明。在类的内部self:$propertynameself:methodname()在类的外部clas
11、sname:$propertynameclassname:methodname()【例6.14】静态成员的使用示例。6.3.6 抽象方法与抽象类的使用用关键字abstract定义抽象方法,用关键字abstract定义的尚未实现且无任何参数的以;结束的方法抽象类,用关键字abstract定义的包含多个抽象方法的类抽象类不能被实例化,允许继承抽象类,生成子类,实现部分抽象方法所有抽象方法实现后,抽象类可被实例化【例6.15】抽象方法与抽象类的使用示例6.3.7 6.3.7 接口的使用接口的使用使用关键字interface进行定义接口相当于一个抽象类,只有一个抽象方法接口中方法的声明必须与实体的实现相匹配创建类时,使用implements实现接口【例6.16】接口的使用示例6.3.8 6.3.8 类方法的调用处理类方法的调用处理使用_call()函数对类方法调用错误的统一处理特殊函数,两个参数,一个方法名,另一个参数数组【例6.17】类方法的调用处理示例6.3.9 6.3.9 类文件的自动加载类文件的自动加载使用_autoload()函数自动加载所需要的类管理、使用、维护大量的类【例6.18】类文件的自动加载示例