php面向对象的程序设计Word文档格式.docx
《php面向对象的程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《php面向对象的程序设计Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
添加,修改,删除
电子商城:
用户,购物车,商品,分类,订单
什么是类:
分类、类型
桌子类,椅子类,电脑类
在类中定义这个类型的属性和方法。
类和对象之间的关系:
声明类------>
实例化对象(创建对象)--------->
用对象
配置单:
Cpu:
e74002.8
内存:
2G
显卡:
5129300
主板:
硬盘:
Price:
定义出电脑的类型,(配置单就是类)
安装出100台电脑(每个电脑就是一个对象)
操作电脑就是在操作对象。
在声明类时,类中的内容就是成员的属性和成员方法,这个类创建出的对象中的内容,就是你在类中声明的内容。
第二讲类的声明与实例化对象
类的声明:
[修饰类的关键字]Class类名{
}
在类中声明成员属性时,前面必须有修饰词,如果不知道使用什么修饰词时,可以使用var。
类中的成员属性,如果创建多个对象时,每个对象的值不同,则不要给初值,
一个文件只保存一个类,文件中包含类名。
文件:
类名.class.php
变量:
aaBbbCcc
函数:
aaBB
常量:
AABB
类名:
AaaBbbCcc
通过类实例化对象
1、使用new新建一个对象,加上类名,就是创建类的对象。
2、只要有一个new关键字就是一个对象,创建了一个对象就在内存中分配了一个空间
对象在内存中的分配
内存中的分配
对象中的成员必须通过对象的引用来访问
对象引用名->
属性;
方法;
$p1=newperson();
$p1->
name="
zhangsan"
;
say();
第三讲构造方法和析构方法
一、对象中成员的访问:
就是在一个对象的内部方法中,去访问本对象中
的其他方法和属性。
2、在对象中的方法中都默认有一个$this关键字,这个关键字代表调用本对象中的其它属性和方法。
3、构造方法:
构造器
1、对象创建完成以后,第一个自动调用的方法。
2、构造方法的定义:
方法名是固定的
在php4中,和类名相同的方法就是构造方法。
在Php5中,构造方法是用魔术方法_construct()所有类中声明
构造方法都是用这个。
什么是魔术方法:
在类中写出了某个魔术方法,这个方法对应的功能就会添加上,方法名称都是固定的(都是系统给我们提供好的),没有自己定义的,每一个魔术方法都是为了在不同时刻完成某一功能自动调用的,不同的魔术方法有不同的调用时期。
以__开头的
__construct()
__destruct()
__set()
__get()
__unset()
__clone()
__call()
__sleep();
__weakup();
__toString();
有时候为了版本兼容,这两种写法都需要写出来。
3、作用:
就是为成员属性初始化。
5、析构方法
1、当对象被释放之前最后一个“自动”调用的方法。
使用垃圾回收器(java,php),而c++手动的释放
2、作用:
关闭一些资源,做一些清理的工作。
第四讲面向对象的三大特性之一—封装性
一、就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节
二、publicprotected
Private私有的,用这个关键字修饰的成员,只能在对象内部访问,不能在对象外部使用。
作用:
属性可以封装:
只要一个变量,需要在多个方法中使用,就将这个方法声明为成员属性,可以直接在这个对象中的所有方法中使用,成员属性,就相当于这个对象中的全局变量,成员属性都会在方法中使用,成员属性值的变换其实就是在改变方法的执行行为,也就是改变了对象的功能,成员属性的值如果不正常,方法执行的功能也就不正常了。
作用:
不需要在对象外修改和访问,经过方法对象成员属性进行赋值和取值可以控制。
方法可以封装:
100个成员,只能取值,不能改。
和封装有关的魔术方法:
__set();
直接设置成员属性值时,自动调用的方法
__get();
直接获取成员属性值时,自动调用的方法。
__isset();
直接查看对象中私有属性是否存在时,自动调用的方法
__unset();
直接删除对象中的私有属性时,自动调用的方法
第四讲面向对象的三大特性之——继承性
开放性和可扩充性
增加了代码的重用性
提高软件的可维护性
继承就是用子类去扩展父类
Php和java属于单继承,也就是只能有一个父类
C++属于多继承,一个类可以有多个父类。
不管是多继承还是单继承都可以有多个子类
只要你在设计两个类时候,有可以共享的成员,就可以共享的内容拿出来,单独作为一个基类使用
父类:
基类
子类:
派生类
1、类继承的应用
1、声明一个子类,使用extends关键字去继承一个父类
2、子类可以从父类继承所有的内容。
在子类中可以直接使用。
Classperson{
Var$name;
Var$age;
Var$sex;
Functionsay(){
Functioneat(){
Functionrun(){
1、如果两个或以上的类中,有公共的部分,就可以共享,共享的就可以作为父类。
2、如果三个类都需要添加同一个功能,只要在父类中添加,所有子类都多了一个功能。
3、如果父类中修改一个成员,则所有子类中的成员也被修改。
2、访问类型的控制
封装时候,既可以让自己类的内部可以访问,也可以让子类用,但是类的外部不能使用。
Protected就可以
3、子类中重载父类的方法
1、子类可以声明和父类相同的方法名,即子类覆盖了父类中同名的方法。
2、在子类中调用父类中被覆盖的方法:
父类名:
:
方法名();
或者parent:
:
3、在子类中编写构造方法,如果父类中也有构造方法一定要去调用父类中被覆盖的构造方法。
注意:
子类中重载的方法,不能低于父类中的访问权限。
(子类可以放大权限,但是不能缩小权限。
)
第五讲常见的关键字和魔术方法
1、关键字
Final
1、final不能修饰成员属性(类中的常量不是用这个关键字)
2、final只能修饰类和方法
使用final修饰的类不能被子类继承
Final修饰的方法不能被子类覆盖。
用来限制类不被继承,方法不被覆盖。
Static
1、使用static可以修饰成员属性和成员方法。
2、用static修饰的成员属性,可以被同一个类的所有对象共享。
3、静态的数据是放在内存中的数据段(初始化数据段)
4、是在类第一次加载时,分配到内存中,以后再用到类时就直接从数据段中获取
5、什么是被加载?
只要是使用这个类,就会被加载(只要有类名出现)
注意:
静态成员都要使用类名去访问,不用创建对象,不用对象去访问。
类名:
静态成员
如果在类中使用静态成员,可以使用self代表本类名。
即:
self:
6、静态方法不能非静态的成员。
非静态的方法中可以访问静态成员。
因为非静态的成员,就必须用对象来访问,访问内部的成员使用的是$this
静态方法不能使用对象来调用,也就没有对象,$this也就不能代表什么对象,非静态的成员必须使用对象。
如果你确定一个方法不使用费静态的成员,则可以将这个方法声明为静态方法,不用创建对象,直接使用类名就可以访问。
Const
1、只能修饰成员属性,不能修饰方法,也不能修饰类。
2、在类中声明常量使用const
3、命名的方式和以前学的define是一样的。
4、访问方式和static静态成员属性是一样的,在类外部使用类名:
常量在类内部:
self:
常量
5、常量一定要在声明时候就给初值。
常量不允许改值。
2、魔术方法
__call()
__toString()
直接输出对象引用时自动调用,用来快速获取对象的字符串表示的最便捷的方式
克隆对象,使用clone去处理。
原本(原来的对象)
复本(复制出来的对象)
__clone()就是在克隆对象时候自动调用的方法
只要一个对象诞生,就要有初始化的动作,和构造方法__construc作用相似。
在__clone()方法中的$this关键字,代表的是复本,that代表的是原本的对象。
__autoload()
其他的魔术方法都是在类中添加的起作用,这是一个唯一不在类中添加的方法。
只要在页面中使用到一个类,只要用到类名就会自动将类名传给这个参数。
Serialize():
参数是一个对象,返回来的是串行化后的二进制串。
对象串行化,将一个对象转为二进制
1、将对象长时间存储在数据库或文件中时
2、将对象在多个php文件中传输时
Unserialize():
参数是返回来的二进制串,返回来的是新生产的对象。
__sleep()
是在序列化时自动调用的方法
作用:
可以将一个对象部分串行化,只要这个方法中返回一个数组,数组中有几个成员就序列化几个成员,如果不加这个方法,则所有的成员都被序列化。
__wakeup()
是在反序列化时自动调用的方法
也是对象重新诞生的一个过程
第六讲抽象类和抽象方法的应用
抽象类是一种特殊的类,接口是一种特殊的抽象类,而多态就要使用到抽象类或是接口。
一、声明抽象类和接口。
抽象类:
1、什么是抽象方法?
如果一个类中的方法,没有方法体的方法,就是抽象方法。
Functiontest();
而不是functiontest(){}
如果方法是抽象方法,就必须使用abstract
2、为什么要使用抽象方法?
3、什么是抽象类?
如果一个类中,有一个方法是抽象的,则这个类就是抽象类。
如果一个类时抽象的,则这个类必须要使用abstract修饰
抽象类是一种特殊的类,,就是因为一个类中有抽象方法,其
他不变。
也可以在抽象类中声明成员属性,常量,非抽象
的方法。
抽象类不能实例化对象(不能通过抽象类创建一个抽象的对象)
接口:
就是定义一些规范,让子类按照这个规范去实现自己的功能。
目的:
要将自己写的程序模块加入到原来已经写好的程序中去。
要想使用抽象类,就必须使用一个类去继承抽象类,而且要想使用这个子类,也就是让子类可以创建对象,子类就必须不能再是抽象类,子类可以重写父类的方法(给抽象方法加上方法体)
抽象方法中的方法没有方法体,子类必须实现这个方法(父类没有具体的实现,但是子类必须有这个方法名)。