PHP对象之抽象和接口传智播客听课笔记韩顺平精.docx
- 文档编号:283600
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:8
- 大小:50.19KB
PHP对象之抽象和接口传智播客听课笔记韩顺平精.docx
《PHP对象之抽象和接口传智播客听课笔记韩顺平精.docx》由会员分享,可在线阅读,更多相关《PHP对象之抽象和接口传智播客听课笔记韩顺平精.docx(8页珍藏版)》请在冰豆网上搜索。
PHP对象之抽象和接口传智播客听课笔记韩顺平精
◆抽象类
一个小问题?
为什么设计抽象类这个技术?
1.在我们实际开发中,我们可能有这样一种类,是其它类的父类,但它本身并不需要被实例化,主要用途是用于让子类来继承,这样可以达到代码复用,同时利于项目设计者设计类
快速入门
abstractclassAnimal{
public$name;
protected$price;
//这个方法不有方法体,这个方法主要是为了让子类去实现
abstractfunctioncry(;
}
classDogextendsAnimal{
//覆盖
functioncry({
echo"小狗汪汪叫";
}
}
//创建一个子类实例
$dog1=newDog(;
$dog1->cry(;
使用抽象类的注意事项
1.基本用法
Abstractclass类名{
//方法
//属性
}
2.用abstract关键字来修饰一个类时,这个类就叫抽象类
3.用abstract关键字来修饰一个方法,这个方法就叫抽象方法,这里抽象方法就不能有方法体
4.抽象类不能被实例化
5.抽象类不一定要包含abstract方法,同时还可以有实现了的方法
6.一旦类包含了abstract方法,则这个类必须声明为abstract
7.抽象方法不能包含函数体
8.如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法
◆接口
快速入门案例
//使用程序模拟现实情况
interfaceiUsb{
publicfunctionstart(;
publicfunctionstop(;
}
//编写手机类,让它去实现接口
//1.当一个类实现了某个接口,则要求该类必须实现这个接口的所有方法
classCameraimplementsiUsb{
publicfunctionstart(
{
echo"相机开始工作";
}
publicfunctionstop(
{
echo"相机停止工作";
}
}
//编写手机类
classPhoneimplementsiUsb{
publicfunctionstart(
{
echo"手机开始工作";
}
publicfunctionstop(
{
echo"手机停止工作";
}
}
$camera1=newCamera(;
$camera1->start(;
$camera1->stop(;
$phone1=newPhone(;
$phone1->start(;
$phone1->stop(;
?
>
1.接口的使用基本语法
Interface接口名{
//属性
//方法
}
☞接口中方法都不能有方法体,都是抽象方法
2.如何去实现这个接口
Class类名implements接口名1,接口2.。
。
。
。
{
}
3.接口的作用就是声明一些方法,供其它类来实现,接口还体现了编程中我们希望的效果——高内聚低耦合的特点
◆深入讨论接口:
interface
什么情况下可以考虑使用接口
1.定规范
2.定下规范,让其他的程序员来实现
//项目经理
//学生管理系统(students
//定义接口
interfaceStuManageInterface{
publicfunctionaddStudent(;
publicfunctiondelStudent(;
publicfunctionupdStudent(;
}
//给张三
classStuManageimplementsStuManageInterface{
}
3.当多个类,他们之间是平级的关系,这些类都要去实现某个功能,只是实现的方式不一样
◆接口的细节问题
1.不能去实例化一个接口
2.接口中的所有方法都不能有方法体
3.一个类可以实现多个接口,但要用逗号隔开
4.接口在可以有属性,但必须是常量,默认是public
interfaceiUsb{
constA=90;
}
echo"Ok";
echoiUsb:
:
A;
5.接口的方法必须都是public,默认是public
6.一个接口不能继承其它的类,但是可以继承别的接口
类和接口关系一图
interfaceiUsb2{
publicfunctiona(;
}
interfaceiUsb3{
publicfunctionb(;
}
interfaceiUsbextendsiUsb2,iUsb3{
constA=90;
functiontest(;
}
classClass1implementsiUsb{
publicfunctiona({
}
publicfunctionb({
}
publicfunctiontest({
}
}
echo"Ok";
echoiUsb:
:
A;
从上面我们看出
1一个接口可以继承一个或多个其他接口
2当一个类去实现某些接口,则必须把所被继承下来的方法都实现
◆继承和实现接口的比较
1.可以认为,实现接口是对单一继承的补充
2.可以在不破坏类层级关系的前提下,对某个类功能扩展
classMonkey{
public$name;
public$age;
publicfunctionclimbing({
echo"猴子会爬树";
}
}
interfaceiBirdable{
publicfunctionfly(;
}
interfaceiFishable{
publicfunctionswimming(;
}
classLittleMonkeyextendsMonkeyimplementsiBirdable,iFishable{
publicfunctionfly({
echo"猴子会飞";
}
publicfunctionswimming({
echo"猴子会游泳";
}
}
$littleMonkey1=newLittleMonkey(;
$littleMonkey1->climbing(;
$littleMonkey1->fly(;
$littleMonkey1->swimming(;
◆Final——关键字
1.如果我们希望有一个类,不被任何子类继承(可能因为安全考虑),可以使用final
finalclassA{
}
classBextendsA{
}
echo"ok";
2.如果我们希望某个方法,比如计算个人所得税的方法,不被任何的子类重写,可以使用final来修饰方法
classA{
finalpublicfunctiongetRate($salary{//
return$salary*0.08;
}
}
classBextendsA{
//不能去覆盖父类的方法
/*publicfunctiongetRate($salary{
return$salary*0.01;
}*/
}
$b=newB(;
echo$b->getRate(100;
3.Final关键字不能去修饰属性
4.final方法可以被继承,但不能被修改
◆const关键字
基本用法:
const常量名=值;
常量访问:
类名:
:
常量名;或接口名:
:
常量名;内部外部都可访问
常量名应全部大写,并且前面不用$
常量是public类型的
常量在定义的时候必须给初值
Const关键字前面不要带修饰符
一个常量是属于某个类的,不属于某个对象
快速入门:
ClassA{
Const常量名=初值;
}
Interface接口名{
Const常量名=初值;
}
classA{
constTAX_RATE=0.08;
publicfunctionpayTax($val{
return$val*A:
:
TAX_RATE;
return$val*self:
:
TAX_RATE;
}
}
$a=newA(;
echo$a->payTax(200;
◆PHP面积编程的综合实例
现在开发
1.画出程序框架图
2.编写代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 对象 抽象 接口 传智播客 听课 笔记 顺平