一:魔术方法:
1》构造方法:__construct()
特点:new的时候自动调用,第一个调用
2》析构方法:__destruct()
特点:最后一个调用,清理内存,变量被销毁前调用,释放资源
3》克隆方法:__clone()
特点:当在类外出现clone 对象的时候调用克隆方法,会把你的属性和方法克隆出来
防止克隆发放:把克隆方法改成私有的方法
4》__toString()
特点:在类外输出对象的时候自动调用的方法
注意:__toString方法里必须return 字符串
5》__get(1) 不存在或者权限不够的属性
特点:当在类外调用不存在或者权限不够的属性的时候自动调用的方法
权限不够:受保护的,私有的 不存在:未定义
6》__set(2) 不存在或者权限不够的属性 改它赋的值
特点:在类外给不存在或者权限不够的属性设置值的时候自动调用的方法
注意:在__set()方法里 $this->不存在或者权限不够的属性 = 值
7》__isset(1) 不存在或者权限不够的属性
特点:在类外检测不存在或者权限不够的属性自动调用的方法
出现:isset(属性名) empty(属性名)
8》__unset(1) 不存在或者权限不够的属性
特点:在类外出现销毁不存在或者权限不够的属性自动调用的方法
出现:unset(属性名)
9》__call(2) 不存在的方法名,往方法里传的数组
特点:在类外访问不存在的方法的时候自动调用的方法
第一个参数是不存在的方法名,第二个是传的数组
10》自动加载类的方法:__autoload(1) 类文件名/类名
特点:自动加载类文件
注意:类文件名和类名相同
比如说:类文件名:aa.class.php
类名:class aa{}
二 抽象类、接口
抽象类:
定义:只要类中有一个方法是抽象的,那么这个类就是抽象类
定义抽象类的关键字:abstract
特点:
1》抽象类不能直接实例化,只能被继承
2》抽象类中抽象方法名称只能定义公共的、受保护的
3》抽象类中可以有属性、普通方法
4》抽象类中定义n个抽象方法名称,子类继承就得>=n个方法
5》子类继承的时候方法权限只能比抽象更宽松
6》定义抽象类的关键字:abstract
7》继承关键字:extends
接口:
定义:有时候数据需要跨服务器端传输,需要提供开放数据引入接口
定义接口的关键字:interface
特点:
1》接口不能直接使用,只能被继承
2》接口中方法只能定义成公共的 ***
3》接口中定义n个方法名称,子类继承的时候就得>=n个方法
4》接口解决了php单继承的问题,实现多继承
5》定义接口的关键字:interface
6》继承关键字:implements
抽象类和接口的区别:
1》抽象类:单继承
接口:可以多继承
2》抽象类:抽象方法可以是公共的/受保护的
接口:必须公共的
3》抽象类:定义关键字:abstract 继承关键字:extends
接口:定义关键字:interface 继承关键字:implements
序列化和反序列化
之前取类里的方法需要实例化得到对象调用方法,每次都new占据内存,
所以引入序列化serialize(对象)和file_put_contents(文件名,序列化后的对象)
下个页面在文件里取出file_get_contents(文件名)反序列化unserialize(序列化的对象)成对象,在调用方法
主要目的:经常使用的方法,不用每次都new 存文件里,减少内存
三 面向对象设计模式
1 策略(Strategy)模式
2 工厂(Factory)模式
3 观察者(Observer)模式
4 观察者(Observer)模式
单例模式:
是什么:是一种设计模式,一个类只能实例化一次,只能有一个
对象。
为什么:只new一次,节省空间资源
怎么做:三私一公
①私有的构造方法
②私有的克隆方法 防止克隆——clone
③私有的静态属性 储存生成的唯一对象
④公共的静态方法 用来访问静态属性储存的对象,如果没有对象,则生成此单例
关键词 instanceof 检查此变量是否为该类的对象、子类、或是实现接口。