版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP面向对象的设计03主讲:邮箱:微博:课前复习类的封装封装后属性和方法的访问魔术方法:__set()、__get()、__isset()、__unset()的使用预习检查类的继承?本章任务1.面向对象的介绍2.如何抽象一个类3.通过类实例化对象4.封装性5.继承性6.常见的关键字和魔术方法7.抽象类与接口8.多态性的应用9.命名空间5.继承性5.1类继承的应用5.2访问类型控制5.3子类中重载父类的方法5.1类继承的应用继承已为大家所熟知的一个程序设计特性,PHP的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。php继承的关键字:extends格式:[修饰符]class子类名extends父类名{
...}类的继承classPerson{public$name;public$age;functiongetInfo(){...}}classStudent{public$name;public$age;public$school;functiongetInfo(){...}functionstudy(){...}}使用继承后的效果:classPerson{public$name;public$age;functiongetInfo(){...}}classStudentextendsPerson{public$school;functionstudy(){...}}通过继承可以简化类的定义。类的继承PHP只支持单继承,不允许多重继承。一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承。可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又继承了类B,那么类C也间接继承了类A,
classA{
....
}
classBextendsA{
....
}
classCextendsB{
....
}子类与父类的属性与方法子类继承父类的所有内容,但父类中的private部分不能直接访问子类中新增加的属性和方法是对父类的扩展子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖定义一个父类(基类)<?php
//声明一个人类,定义人所具有的一些其本的属性和功能成员,作为父类
classPerson{
var
$name;
//声明一个存储人的名字的成员
var
$sex;
//声明一个存储人的性别的成员
var
$age;
//声明一个存储人的年龄的成员
function__construct($name="",
$sex="男",
$age=1)
{
$this->name=
$name;
$this->sex=
$sex;
$this->age=
$age;
}
functionsay(){
echo
"我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."。<br>";
}
functionrun()
{
echo
$this->name."正在走路。<br>";
}
}
//声明一个学生类,使用extends关键字扩展(继承)Person类
classStudentextendsPerson{
var
$school;
//在学生类中声明一个所在学校school的成员属性
functionstudy()
{//在学生类中声明一个学生可以学习的方法
echo
$this->name."正在".$this->school."学习<br>";
}
}
//再声明一个教师类,使用extends关键字扩展(继承)Student类
classTeacherextendsStudent{
var
$wage;
//在教师类中声明一个教师工资wage的成员属性
//在教师类中声明一个教师可以教学的方法
functionteaching()
{
echo
$this->name."正在".$this->school."教学,每月工资为".$this->wage."。<br>";
}
}
$teacher1
=
newTeacher("张三",
"男",
40);
//使用继承过来的构造方法创建一个教师对象
$teacher1->school=
"edu";
//将一个教师对象中的所在学校的成员属性school赋值
$teacher1->wage=
3000;
//将一个教师对象中的成员属性工资赋值
$teacher1->say();
//调用教师对象中的说话方法
$teacher1->study();
//调用教师对象中的学习方法
$teacher1->teaching();
//调用教师对象中的教学方法5.2访问类型控制访问权限:
private protected public(默认的)--------------------------------------------------------------------------在同一类中:可以 可以
可以类的子类中:X
可以
可以其他外部类中:X
X
可以<?php
//声明一个类作为父类使用,将它的成员都声明为私有的
classMyClass{
private
$var1
=
100;
//声明一个私有的成员属性并给初值为100
//声明一个成员方法使用private关键字设置为私有的
private
functionprintHello()
{
echo
"hello<br>";
//在方法中只有一条输出语句作为测试使用
}
}
//声明一个MyClass类的子类试图访问父类中的私有成员
classMyClass2extendsMyClass{
//在类中声明一个公有方法,访问父类中的私有成员
functionuseProperty()
{
echo
"输出从父类继承过来的成员属性值".$this->var1."<br>";
//访问父类中的私有属性
$this->printHello();
//访问父类中的私有方法
}
}
$subObj
=
newMyClass2();
//初始化出子类对象
$subObj->useProperty();
//调用子类对象中的方法实现对父类私有成员的访问<?php
//声明一个类作为父类使用,将它的成员都声明为保护的
classMyClass{
protected
$var1=100;
//声明一个保护的成员属性并给初值为100
protected
functionprintHello()
{
//声明一个成员方法使用protected关键字设置为保护的
echo
"hello<br>";
//在方法中只有一条输出语句作为测试使用
}
}
//声明一个MyClass类的子类试图访问父类中的保护成员
classMyClass2extendsMyClass{
//在类中声明一个公有方法,访问父类中的保护成员
functionuseProperty()
{
echo
"输出从父类继承过来的成员属性值".$this->var1."<br>";
//访问父类中受保护的属性
$this->printHello();
//访问父类中受保护的方法
}
}
$subObj
=
newMyClass2();
//初始化出子类对象
$subObj->useProperty();
//调用子类对象中的方法实现对父类保护的成员访问
echo
$subObj->var1;
//试图访问类中受保护的成员,结果出错5.3子类中重载父类的方法在子类里面允许重写(覆盖)父类的方法在子类中,使用parent访问父类中的被覆盖的属性和方法parent::__construce();parent::fun();<?php
classPerson{
protected
$name;
protected
$sex;
publicfunction__construct($name=“”,
$sex=“男”)
{...属性赋值
}
publicfunctionsay(){...输出属性信息
}
}classStudentextendsPerson{//声明学生类,使用extends继承Person类
private
$school;
//构造方法重写(覆盖)
publicfunction__construct($name="",
$sex="男",
$school="")
{
parent::__construct($name,$sex);
//调用父类构造方法,初始化父类
$this->school=
$school;
//新添加一条为子类中新声明的成员属性赋初值
}publicfunctionsay()
{//方法重写(覆盖)
parent::say();
//调用父类中被本方法覆盖掉的方法
echo
"在".$this->school."学校上学<br>";
//在原有的功能基础上多加一点功能
}
}$student
=
newStudent("张三","男",20,
"edu");
//创建学生对象,并多传一个学校名称参数
$student->say();
//调用学生类中覆盖父类的说话方法6.常见的关键字和魔术方法6.1final关键字的应用6.2static关键字的使用6.3单态设计模式6.4const关键字6.5instanceof关键字6.6克隆对象6.7类中通用的方法__toString()6.8__call()方法的应用6.9自动加载类6.10对象串行化6.1final关键字的应用在PHP5中新增加了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性。final的特性:使用final关键字标识的类不能被继承;使用final关键字标识的方法不能被子类覆盖(重写),是最终版本;目的:一是为了安全,二是没有必要6.2static关键字的使用static关键字表示静态的意思,
用于修饰类的成员属性和成员方法(即为静态属性和静态方法)。类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问。格式:
类::$静态属性类::静态方法在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用。格式:
self::$静态属性self::静态方法静态方法中不可以使用非静态的内容。就是不让使用$this。在一个类的方法中若没有出现$this的调用,默认此方法为静态方法。静态属性是共享的。也就是new很多对象也是共用一个属性。<?php
//声明一个MyClass类,用来演示如何使用静态成员
classMyClass{
publicstatic
$count;
//声明一个静态成员属性count,用来统计对象被创建次数
publicfunction__construct()
{
//每次创建一个对象就会自动调用一次这个构造方法
self::$count++;
//使用self访问静态成员count,使其自增1
}
publicstatic
functiongetCount()
{
//声明静态方法,在类外面可以直接使用类名调用
returnself::$count;
//在方法中使用self访问静态成员并返回
}
}
MyClass::$count=0;
//在类外面使用类名访问类中的静态成员,为其初始化赋值0
$myc1
=
newMyClass();
//创建第一个对象,在构造方法中将count累加1
$myc2
=
newMyClass();
//创建第二个对象,在构造方法中又为count累加1
$myc3
=
newMyClass();
//创建第三个对象,在构造方法中再次为count累加1
echoMyClass::getCount();
//在类外使用类名访问类中静态方法,获取静态属性的值3
echo
$myc3->getCount();
//通过对象也可以访问类中的静态方法,获取静态属性的值36.3单态设计模式
单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在。<?phpclassDB{
private
static
$obj
=
null;
//声明一个私有的,静态的成员属性$objprivate
function__construct()
{//私有构造方法,只能在类的内部实例化对象 echo
"连接数据库成功<br>";
}
publicstatic
functiongetInstance()
{//通过此静态方法才能获取本类的对象
if(is_null(self::$obj))
//如果本类中的$obj为空,说明还没有被实例化过
self::$obj
=
newself();
//实例化本类对象
returnself::$obj;
//返回本类的对象
}
publicfunctionquery($sql)
{//执行SQL语句完成对数据库的操作
echo
$sql;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贸易代理国际商务合同纠纷处理实务考核试卷
- 磷肥生产工艺改进与创新考核卷考核试卷
- 专题02整式加减的应用(应用题专项训练)(沪科版)(原卷版+解析)
- 船舶设计中虚拟现实技术的应用考核试卷
- 桥梁工程钢结构设计与施工考核试卷
- 燃气具测试方法与仪器使用考核试卷
- 港口及航运设施工程项目的航道维护管理考核试卷
- 危险品仓储安全生产数据统计分析考核试卷
- 生鲜农产品冷链物流行业调研及投资前景分析报告
- 西药批发企业品牌形象塑造与传播策略考核试卷
- 人教版八年级语文上册 第一单元 单元测试卷(2024年秋)
- TDT 1083-2023 国土调查数据库更新数据规范
- 名人-老子-人物介绍
- 厂房方案设计说明
- 库欣综合征病人的护理
- 少先队组织机构一览表
- 明州大桥主桥施工方案
- 血液透析室新发传染病患者报告制度
- 课本剧《田忌赛马》剧本
- 学校招投标管理办法(完整版)
- 手冲咖啡PPT[教学课堂]
评论
0/150
提交评论