文档详情

php面向对象(封装,继承,多态,接口,抽象类,重载).doc

发布:2025-06-04约4.23千字共23页下载文档
文本预览下载声明

回顾

类常量访问:类::常量名

静态:静态属性和静态方法,静态是给类访问,使用::,self

self与$this区别:本质不一样,访问形式不一样,访问的内容不一样

魔术方法:__toString(),__clone()(被克隆出来的对象调用)

设计模式:单例模式(三私一公)和工厂模式

对象的保存与还原:序列化和反序列化

对象保存与还原

资源不能被序列化保存和反序列化。

不能被序列化:因为资源在脚本执行结束之后,会断开,资源会失效,保存一个失效的资源没有任何意义,且资源数据类型很特殊,不能被保存。

不能被反序列化:资源根本就不能被保存,不存在反序列化一说。

魔术方法

序列化魔术方法

__sleep():用来指定要进行保存的属性,返回一个属性数组

效果

反序列化效果

反序列化后依然没有得到资源的连接,不能使用对象。

__wakeup():醒来,就是当对象被进行反序列化的时候,会自动触发的方法

效果

面向对象的三大特性

三大特性:封装,继承和多态

封装

封装:将一类相同的实体,把他们的公共的属性和能力抽象出来,形成计算机能够识别的类的过程。

专业定义:将数据(属性)以及和数据的操作(方法)捆绑到一起,形成一个对外的实现的隐藏。

封装的意义

安全,内部的操作以及数据的处理对外是隐藏

方便访问:外部只需要调用内部的属性和方法即可

方便维护:维护人员只需要修改类就可以修改所有的流程

继承

继承:从法律意义上来讲,继承人可以拥有被继承人的财产

程序继承:继承是面向对象特有的特征。子类继承父类之后,子类可以使用父类里面定以后的数据和方法。

//父类

classParent{

protected$money=1000000;

protectedfunctionmakeMoney(){

echo‘Fathermakesmoney’;

}

}

//子类

classSonextendsParent{

publicfunctionxuanyao(){

$this-makeMoney();

echo$this-money;

}

}

$son=newSon();

$son-xuanyao(); //访问到父类的money属性和makeMoney方法

多态

多态:多种形态,父类的对象本质是子类,可以调用子类的方法。

多肽满足条件:有继承,有重写(子类有父类的同名方法)

//父类

classFather{

publicintfunctionmakeMoney(){

system.out.println(‘FathermakesMoney’);

return0;

}

}

//子类

classSonextendsFather{

publicintfunctionmakeMoney(){

//重写父类方法

system.out.println(‘SonmakesMoney’);

return0;

}

}

//多态

Fatherfather=newSon(); //Father类的对象本质上是Son对象

father.makeMoney(); //SonmakesMoney

PHP不支持多态:PHP是一种弱类型语言

重写:子类拥有自己的与父类同名的方法

重载:指的是一个类拥有多个同名的方法,但是其返回值或者参数列表或者参数类型不一致

classSon{

publicintfunctioneat(inta){

system.out.println(‘吃饭’);

return0;

}

publicstringfunctioneat(stringa){

system.out.println(‘吃饭’);

return‘’;

}

publicstringfunctioneat(stringa,intb){

system.out.println(‘吃饭’);

return‘’;

}

}

PHP是弱类型语言,不支持传统意义上的方法重载。

PHP继承

PHP继承:子类对象能够继承父类中定义的所有非静态属性和非私有的非静态方法。

继承语法

extends关键字

子类extends父类

属性继承效果

方法继承效果

继承优点

减少代码量,子类可以直接使用父类的某些方法和属性

易于扩展:可以基于父类已有的内容进行重新扩展(重写)

protected

protected是受保护的访问修饰限定符,是专门用于修饰可以被继承的方法或者属性。表示当前属性或者方法(父类的)可以在子类中被子类对象所使用。

继承访问

虽然子类可以继承父类的私有属性,但是却不能在子类中直接访问私有属性。(私有属性只能在自己对应的类

显示全部
相似文档