《PHP开发》-第7章 面向对象技术_第1页
《PHP开发》-第7章 面向对象技术_第2页
《PHP开发》-第7章 面向对象技术_第3页
《PHP开发》-第7章 面向对象技术_第4页
《PHP开发》-第7章 面向对象技术_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

学习目标在完成本章的学习后,您将能够:掌握面向对象的定义和概念掌握类的定义和对象的生成熟练掌握面向对象编程的基本技术

目录7.1

面向对象的概念

7.1.1

面向对象编程的基本概念

7.1.2

面向对象编程的主要特征

7.2

类和对象

7.2.1

类的定义

7.2.2

对象的创建

7.2.3

类成员和作用域

7.2.4构造函数7.2.5析构函数7.3

高级应用7.3.1

final关键字7.3.2

抽象类与抽象方法

7.3.3接口7.4综合案例

7.1.1面向对象编程的基本概念在面向对象编程中,应用程序的结构模块被组织为相应的对象(object)。一个面向对象的应用程序实际上就是由一系列的相关对象所构成的。作为应用程序的基本组件,对象是封装了相应属性(property)与方法(method)的实体(entity)。其中,属性描述了对象的静态特征,即对象的数据或状态;而方法则描述了对象的动态行为,即对象所能执行的功能或操作。所谓类,其实就是具有相同特征与操作的一组对象的描述与定义,相当于对象的类型或分类。7.1面向对象的概念7.1.2面向对象编程的主要特征与面向过程编程相比,面向对象编程有其明确的特征。其中,最主要的特征就是封装性、继承性与多态性。封装性是指将数据(即属性)与操作(即方法)置于对象之中,其主要目的是为了实现对象的数据隐藏与数据保护,并为对象提供相应的接口。继承性是指从一个已存在的类派生出另外一个或多个新类。其中,被继承的类称为父类,而通过继承所产生的类则称为子类。

多态性是指同名方法(或函数)的功能可随对象类型或参数定义的不同而有所不同。实现多态性的主要方法是重载,即对类中已有的方法进行重新定义。7.1面向对象的概念7.2.1类的定义

在面向对象的思想中最核心的就是对象,为了在程序中创建对象,产生需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义属性和方法,其属性用于描述对象的特征,方法用于描述对象的行为。类的定义语法格式如下:

class类名{

成员属性;成员方法

}7.2类和对象7.2类和对象【例7-1】<?php //定义一个Person类

classPerson{ public$name; public$age; publicfunctionspeak(){ echo"大家好!我叫".$this->name.",今年".$this->age."岁。<br>"; } }?>7.2.2对象的创建应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在PHP程序中可以使用new关键字来创建对象,具体格式如下:$对象名=new类名([参数1,参数2,…]);7.2类和对象7.2类和对象【例7-2】<?php //定义一个Person类

classPerson{ public$name; public$age; publicfunctionspeak(){ echo"大家好!我叫".$this->name.",今年".$this->age."岁。<br>"; } } $p1=newPerson(); $p1->name="赵磊"; $p1->age=14; $p1->speak();?>7.2.3类成员和作用域1、类常量在类中,有些属性的值不能改变,并且希望被所有对象所共享,例如圆周率,它是一个数学常数,在数学物理计算中广泛使用,此时可以将表示圆周率的成员属性定义为常量。类常量在定义时需要使用const关键字来申明,示例代码如下:constPI=3.1415926;//定义一个常量属性PI7.2类和对象7.2类和对象【例7-3】<?php classMathTool{ constPI=3.1415926;//定义一个类常量

publicfunctionshow(){ echoMathTool::PI."<br>";//通过类名访问

} publicfunctiondisplay(){ echoself::PI."<br>"; //通过self关键字访问

} } echoMathTool::PI."<br>";//在类外部直接访问

$obj=newMathTool();//实例化一个对象

$obj->show(); $obj->display();?>7.2.3类成员和作用域2、静态属性有时候,我们希望某些特定的数据在内存中只有一份,并且可以被类的所有实例对象所共享。定义静态属性的语法格式如下:访问修饰符static变量名7.2类和对象7.2类和对象【例7-4】<?php classStudent{ //定义show()方法,输出学生的学校名称

publicstatic$SchoolName="bhcy"; publicfunctionshow(){ echo"我的学校是:".self::$SchoolName."<br>"; } } $stu1=newStudent(); $stu2=newStudent(); echo"学生1:<br>"; $stu1->show(); echo"学生2:<br>"; $stu2->show();?>7.2.3类成员和作用域3、静态方法有时我们希望在不创建对象的情况下就可以调用某个方法,也就是使该方法不必和对象绑在一起。要实现这样的效果,可以使用静态方法。静态方法在定义时只需在方法名前加上static关键字,其语法格式如下:访问修饰符static方法名()7.2类和对象7.2类和对象【例7-5】<?php classStudent{ //定义show()方法,输出学生的学校名称

publicstatic$schoolName="bhcy"; publicstaticfunctionshow(){ echo"我的学校是:".self::$schoolName; } } Student::show();?>7.2.4构造函数构造函数是类中的一个特殊函数(或特殊方法),可在创建对象时自动地加以调用。通常,可在构造函数中完成一些必要的初始化任务,如设置有关属性的初值、创建所需要的其他对象等。7.2类和对象7.2类和对象【例7-6】<?phpclassstudent{

var$xh;

var$xm;

var$xb;function__construct($xh,$xm,$xb){ $this->xh=$xh; $this->xm=$xm; $this->xb=$xb;}

functiongetinfo(){ echo"学号:$this->xh"."<BR>"; echo"姓名:$this->xm"."<BR>"; echo"性别:$this->xb"."<BR>";}}$MyStudent=newstudent("20170501","赵磊","男");$MyStudent->getinfo();//调用方法(输出学生信息)$MyStudent->xm="赵磊";//访问属性(修改学生姓名)echo"姓名:".$MyStudent->xm;//访问属性(输出学生姓名)$MyStudent=NULL;//销毁学生对象?>7.2.5析构函数与构造函数一样,析构函数也是类中的一个特殊函数(或特殊方法)。但与构造函数相反,析构函数是在销毁对象时被自动调用的。通常,可在析构函数中执行一些在销毁对象前所必须完成的操作。7.2类和对象7.2类和对象【例7-7】<?phpclassstudent//学生类{var$xm;//属性

function__construct($xm)//构造函数

{ $this->xm=$xm; echo"学生<".$this->xm.">来啦!<BR>";}function__destruct()//析构函数

{ echo"学生<".$this->xm.">走了!<BR>";}}$MyStudent=newstudent("赵磊");//创建学生对象$MyStudent=NULL;//销毁学生对象?>7.2.6继承在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字,具体语法格式如下:class子类名extends父类名{//类体}7.2类和对象7.2类和对象【例7-8】<?php

classAnimal{ public$name; publicfunctionshout(){ echo"动物发出叫声<br>";} } classCatextendsAnimal{ publicfunctionprintName(){ echo"name=".$this->name;} } $cat=newCat(); $cat->name="小猫"; $cat->shout(); $cat->printName();?>7.2类和对象【例7-9】<?php //定义Animal类

classAnimal{ publicfunctionshout(){ echo"动物发出叫声"; } } classCatextendsAnimal{ publicfunctionshout(){ echo'喵喵......'; } } $cat=newCat(); $cat->shout();?>7.2类和对象【例7-10】<?php

classAnimal{

publicfunctionshout(){ echo"动物发出叫声"; } } classCatextendsAnimal{

publicfunctionshout(){ parent::shout(); echo"<br>"; echo'喵喵......'; } } $cat=newCat(); $cat->shout();?>7.3.1final关键1、final关键字修饰类PHP中的类被final关键字修饰后,该类将不可以被继承,也就是不能够派生子类。2、final关键字修饰方法当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法。7.3高级应用7.2类和对象【例7-11】<?php classAnimal{ finalpublicfunctionshout(){ //方法体为空

} } classCatextendsAnimal{ publicfunctionshout(){ //方法体为空

} } $cat=newAnimal(); $cat->shout();?>7.3.2抽象类与抽象方法在PHP5中,除了一般的类与方法以外,还可以定义和使用相应的抽象类与抽象方法,其中,抽象方法是指使用关键字abstract定义的尚未实现(即没有任何代码)且无任何参数的以分号“;”结束的方法,而抽象类则是指使用关键字abstract定义的包含有一个或多个抽象方法的类。7.3高级应用7.2类和对象【例7-12】<?phpabstractclassstudent//抽象类student{var$xh;

var$xm;

var$xb;function__construct($xh,$xm,$xb){ $this->xh=$xh; $this->xm=$xm; $this->xb=$xb;}abstractfunctiongetinfo();}classstudent_Aextendsstudent{functiongetinfo()//实现父类中的抽象方法

{ echo"学号:$this->xh"."<BR>"; echo"姓名:$this->xm"."<BR>"; echo"性别:$this->xb"."<BR>";}}7.2类和对象classstudent_Bextendsstudent{functiongetinfo()//实现父类中的抽象方法

{ echo"No.:$this->xh"."<BR>"; echo"Name:$this->xm"."<BR>"; echo"Sex:$this->xb"."<BR>";}}$MyStudent_A=newstudent_A("20170501","赵磊","男");$MyStudent_A->getinfo();$MyStudent_A=NULL;$MyStudent_B=newstudent_B("20170501","赵磊","男");$MyStudent_B->getinfo();$MyStudent_B=NULL;?>7.3.3接口如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。在定义接口时,需要使用interface关键字,具体示例代码如下:interfacesetdata//接口setdata{functionsetinfo($a,$b,$c);}7.3高级应用7.2类和对象【例7-13】<?phpinterfacesetdata//接口setdata{functionsetinfo($a,$b,$c);}interfacegetdata//接口getdata{functiongetinfo();}classstudentimplementssetdata,getdata//学生类student{var$xh;var$xm;var$xb;

7.2类和对象functionsetinfo($xh,$xm,$xb)//实现方法setinfo{ $this->xh=$xh; $this->xm=$xm; $this->xb=$xb;}functiongetinfo()//实现方法getinfo{ echo"学号:$this->xh"."<BR>"; echo"姓名:$this->xm"."<BR>"; echo"性别:$this->xb"."<BR>";}}$MyStudent=newstudent;$MyStudent->setinfo("20170501","赵磊","男");$MyStudent->getinfo();$MyStudent=NULL;?>请编写一个计算器类

温馨提示

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

最新文档

评论

0/150

提交评论