02面向对象静态继承.docx
- 文档编号:28365585
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:15
- 大小:1.11MB
02面向对象静态继承.docx
《02面向对象静态继承.docx》由会员分享,可在线阅读,更多相关《02面向对象静态继承.docx(15页珍藏版)》请在冰豆网上搜索。
02面向对象静态继承
回顾
面向对象:
是一种思想。
寻找事务操作的主体,按照主体进行分类,完善各个功能。
基本概念:
类,对象,实例化
类:
是对具体实体的抽象化(把一些共性都抽离出来,形成一个计算机能够识别的结构)
对象:
是对类的具象化
实例化:
从类制造对象的过程new
类:
class
类成员:
属性(类中的变量),方法(类中的函数)和类常量
访问修饰限定符:
public,private和protected
属性和方法的访问
1.对象和方法都是通过对象进行访问
2.公共的属性和方法,可以通过对象直接进行访问
3.私有的属性和方法,只能通过对象去调用类中的公有方法,并在公有方法里面去访问私有成员
4.在类里,可以使用$this来代替某个外部正在调用类方法的对象
对象的传值:
引用传值
对象的比较:
对象的比较是比较类,比较属性个数,比较属性的值
类常量:
const
1.对象不能访问常量
2.类访问:
类名(self):
:
常量名,__CLASS__获取当前类的类名
魔术方法:
构造方法和析构方法
构造方法:
__construct(),用来初始化对象(属性的赋值)
析构方法:
__destruct(),用来释放资源
自动加载:
__autoload()魔术函数
实现函数:
在函数中加载指定的类文件
self与$this的区别
1.区别:
代表不一样的内容:
self代表类,$this代表对象
2.区别:
访问的内容也不一样:
self访问类常量,$this访问属性和方法(普通)
3.区别:
self与$this访问数据的方式不一样,self使用范围解析操作符(:
:
),$this使用对象访问符(->)
4.相同:
都是在类中使用(都是在方法里面使用)
静态(static)
在类中也有类似函数的静态变量之类的东西,(函数中:
不被重复定义,函数的多次调用共有一个静态变量),使用静态修饰的表示该属性或者方法属于类,不会因为对象的实例化而改变其本身的内容。
语法:
1.静态属性:
访问修饰限定符static属性名字
2.静态方法:
访问修饰限定符staticfunction方法名字(){}
静态访问:
类:
:
静态属性或者静态方法
需求:
当类创建一个对象时,使用一个计数器将对象的数量给记录下来。
见代码:
demo01_static.php
静态方法使用
静态与非静态的区别
1.设置出发点:
静态是给类使用,非静态是给对象使用
2.对象不能访问静态属性(对象访问属性只会去对象的内存区域(堆)找,而静态属性在代码区),对象能够访问静态方法(静态方法和普通方法都在代码区里)
3.类能够访问普通方法(方法里面没有使用$this),类不能访问普通属性(属性是在对象空间里)
魔术方法
对象输出
__toString():
将一个对象变成字符串,写在类里面。
当对象被使用echo进行输出的时候,系统会自动调用该方法
对象克隆
对象的另外一种产生方式,不是从类产生对象,从对象本身产生对象
克隆:
将一个对象完整的复制一份,新开辟一块内存空间,将复制的结果存放到该内存里面。
语法:
新对象(变量)=clone对象(变量)
__clone():
当一个对象被clone的时候会自动调用的方法
克隆对象的时候,不走构造方法。
__clone()是由被克隆出来的对象去调用。
设计模式
设计某个程序的方式。
php中设计模式不多,有两个是需要讲:
单例模式和工厂
单例模式:
一个类只能最多创建出一个对象。
实现单例,必须满足以下条件:
1.不让克隆(私有化克隆魔术方法)
2.不让创建对象(私有化构造方法),不能在类外部使用new关键字创建对象。
3.进入到类中,创建对象(静态方法)
4.要在类中使用静态属性来保存已经产生的对象,用于判断
单例模式代码见:
demo06_single.php
单例模式的好处?
1.只能创建一个对象,能够节省资源(内存)
单例模式:
满足三私一公
三私:
私有构造方法,私有克隆方法,私有静态属性
一公:
公共静态方法(产生对象)
不是所有的面向对象都有类这个概念。
js是一门面向对象的语言,但是js没有class这个概念。
js中的类就是函数。
OOP(ObjectOrientedProgramming)
面向对象编程有以下几个特点:
封装,继承,多态
封装
将某类数据的共同特性抽离出来,形成计算机可以识别的代码的过程就称之为封装(抽象),将数据(属性)以及对数据的操作(方法)捆绑到一起,形成一个整体(class),对外隐藏技术实现(外部不知道内部具体是如何实现的),只提供调用的接口(public修饰的外部访问:
属性和方法)。
封装--------形成类的过程
继承
继承的现实意义:
后代拥有父代的财产和能力
程序的继承:
现象对象才有的概念,如果某个类与另外一个类基本上功能差不多,然后稍微会多出一点功能。
将这个多出功能的类定义为一个子类,然后基本功能的类定义为父类,然后将子类继承父类。
子类的对象能够拥有子类和父类的所有属性(public和protected)以及方法的使用。
classFather{
protected$house;
}
classSon继承Father{
}
$son=newSon();
$son就拥有$house属性
抽象具有层级性。
继承好处
1.减少代码量
多态
多态:
多种形态,面向对象,要有继承,重写
php中不支持多态。
classFather{
publicfunctionchifan(){
system.println(‘父亲吃饭’);
}
}
classSon继承Father{
publicfunctionchifan(){
system.println(‘儿子吃饭’);
}
}
Fatherf=newSon();//对象是Son的对象,对象的数据类型是Father
f.chifan();//儿子吃饭
重写:
override在子类中有与父类同名的方法,内容不一样,子类重写父类的方法。
重载:
overload,php又不支持,因为php是弱类型语言,php不支持同名函数或者方法
重载就是在一个类中可以根据方法的返回值或者参数列表的不一样,形成不同的方法,方法的方法名字却相同
classPerson{
publicintfunctioneat(){
return1;
}
publicstringfunctioneat(){
return‘1’;
}
publicintfunctioneat(inti){
returnI;
}
publicintfunctioneat(strings){
returninteger(s);
}
}
继承
如何实现类与类之间的继承呢?
需要一份遗嘱:
extends
语法
class父类{
}
//继承
class子类extends父类{
}
继承实例
属性继承:
所有的非静态属性都被继承
方法继承
1.公有的可以被继承
2.受保护的可以被继承
3.私有的不能被继承
继承内存原理
访问父类的私有属性
继承链
1.凡是使用了extends继承,继承是双向的。
只要在继承链上,就可以对链上的其他类的公有和受保护的方法进行访问。
2.在php中不支持多重继承(一个子类继承自多个父类),使用链式结构实现多重继承
AextendsB
CextendsA:
C既有A类的属性和方法,又有B类的属性和方法。
私有的属性或者方法都必须在对应的类中才能被访问,其他地方都不可以。
如果子类拥有与父类同名的属性或者方法会怎么样?
重写
当子类拥有与父类同名的方法或者属性的时候,会重写父类的属性和方法。
(非私有的)
属性重写
方法重写
证明
如果在子类重写了父类的方法之后,需要父类的同名方法也执行。
parent关键字:
代表父类
特殊类
final类
父类的方法不允许子类重写。
final:
最终的意思
类:
final修饰的类,表示该类不能被继承。
方法:
final修饰的方法,不允许子类重写
重写要求:
子类的权限要比父类的权限要开放
abstract类
抽象类:
只能被继承的类,不能被实例化
抽象方法:
方法只有名字没有方法体
abstractpublicfunctioneat();
继承抽象类的子类必须实现全部的抽闲方法。
被继承
抽象类的意义
1.只能被继承
2.子类必须实现父类的抽象方法
3.在于规范团队协作能力(如果有不同的团队去实现不同的方案,有必要对不同的团队进行一些规范,相同功能该如何命名)
抽象类中可以有普通类中所有的内容。
(包括各式访问修饰限定符)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 02 面向 对象 静态 继承