1.trait 关键字 实现多继承
注:trait里面也可以定义属性
2.接口类和抽象类以及设计模式
(1)接口类---不能具体实现方法,只能定义。
a. 接口类是类的模板,如同类是对象的模板一样,用户只管去接口内有的函数,而不关心函数具体怎么实现。用类去implements某个接口时,必须在类里具体实现接口定义的方法。
b. 接口也可以作为一种数据类型定义变量,常在实现方法时作为形参,在使用这个方法时,传入的实参必须是由已经实现了该接口的类定义。如图。而之所以再用另一个类,是为了方便代码调整。比如再定义 一个women类继承act接口,使$k->eat()实现women类的eat(),只需将倒数第二行改为$k=L::factory(new women());这是一种十分重要的设计模式
c. 可以一个类实现多个接口
class A implements act1,act2{
xxxxxxxxxxx
..........
}
(2)抽象类(abstract)---可以具体实现方法,也可以定义空方法。
定义:abstract class xxx{
public function eat(){
xxxxxxxx...
}
public function sleep(){} //此处与接口不同;
}
(3)单例模式 建议看这节课带的视频 单例模式实例之cookie操作类的封装https://www.imooc.com/video/15860
为了节约内存,让类只能自己创建自己的对象,不能再外部用常规方法创建对象(所以构造方法一定为私有),实例化一个对象,就可以给不同的变量用。具体见http://www.runoob.com/design-pattern/singleton-pattern.html
输出:可见只创建了一个实例,ID=1
object(A)#1 (0) { }
object(A)#1 (0) { }
object(A)#1 (0) { }