设计模式:
所谓设计模式,就是解决问题的“常规做法”,是一种认为较好的经验总结
总厂模式:
我们可以设计一个工厂(类),该工厂的作用(任务)就是为人们生产各种对象,这种工厂通常只要指定类名,就可以据此获取一个该类的对象
单例模式:
应用中的某些需求:
对于某些类,在使用他们的时候,从头到尾(程序的开始打结束)都只需要一个对象,就可以完成所有任务
某个类,只允许其创建出一个对象,即使去进行多次创建,也只能得到一个对象
$obj1 = new A();
$obj2 = $obj1; //此时还是一个对象,$obk2只是最终指向了跟$obj1同样的对象
$obj3 = new A(); //现在才有第二个对象
一个对象还可以使用clone运算符进行克隆,则会生成新对象
抽象类:
在正常定义类的前年,加上关键字:abstract,那就构成抽象类
abstract class 类名{.....类的定义.....}
抽象类是专门做父类的
抽象方法:
抽象方法就是一个没有方法体(也不含大括号)的方法定义“头”而已
前面需加abstract
比如:abstract function f1($x1, $y, $m) ; //注意,后面一定有分号。
作用:
配合抽象类,来实现对下级类的行为规范,相当于要求下级去完成该功能,但自己不做
抽象类抽象方法细节描述:
1.如果一个方法定义为抽象方法,则其所在的类必须定义为抽象类
2.子类继承自一个抽象类,则子类必须实现父类中所有的抽象方法,除非子类也继续作为抽象类
PHP中的重载技术:
1.通常面向对象语言的重载技术
语法:在一个类中,有多个同名的方法,每个方法的参数不同而已,这种现象就被称为重载
参数不同可以是:数量个数不同,类型不同,顺序不同
比如:class A{
int function f1(int x){.....}
int function f1(int x, int y){.....}
int function f1(string s int m){.....}
};
属性重载:
如果使用一个不存在的属性,就会去自动调用类中预先定义好的某个方法以处理数据
方法重载:
如果使用一个不存在的方法,就会去自动调用类中预先定义好的某个方法以处理该行为
2.属性重载
形式:
1.取值: $v1 = 对象->属性 //如果属性不存在会调用__get()方法
2.赋值: 对象->属性 =xx值 //如果属性不存在会调用__set()方法
3.判断是否存在:isset(对象->属性) //如果属性不存在会调用__isset()方法
4.销毁:unset(对象->属性) //如果属性不存在会调用__unset()方法
3.方法重载
当使用一个对象调用一个不存在的普通方法的时候,会自动调用预先定义好的__call方法
当使用一个对象(类)调用以个不存在的静态方法的时候,会自动调用预先定义好的__callStatic方法
上面几个魔方都称为魔术方法:
__get(), __set(), __isset(), __unset(), __call(), __callstatic();
接口 interface:
类:有属性,有方法;有类常量;
抽象类:有属性,有方法;有类常量;还可以有抽象方法(只有方法头);
更抽象的类就是接口:有接口常量;还可以有抽象方法(只有方法头);
接口可以看作是抽象类的更高层面的抽象规范,不考虑接口常量,那就相当于规定了下级类需要做什么
接口可以实现多继承(多实现) 类不行
一个类只能继承一个父类,但可以实现多个“上级接口”,语法形式:class 类A extends 类B implements 接口1,接口2,.... { 。。。类定义语句。。。}
一个接口同样可以继承另一个接口(也是单继承):interface 接口1 extends 接口2 {接口定义}