美文网首页
2019-01-16

2019-01-16

作者: 成都阿童木 | 来源:发表于2019-01-17 15:14 被阅读0次

    1.trait 关键字 实现多继承

    注:trait里面也可以定义属性

    2.接口类和抽象类以及设计模式

    (1)接口类---不能具体实现方法,只能定义。

    a.   接口类是类的模板,如同类是对象的模板一样,用户只管去接口内有的函数,而不关心函数具体怎么实现。用类去implements某个接口时,必须在类里具体实现接口定义的方法。

    一个类继承了某个接口,就必须具体实现该接口所有的方法

    b. 接口也可以作为一种数据类型定义变量,常在实现方法时作为形参,在使用这个方法时,传入的实参必须是由已经实现了该接口的类定义。如图。而之所以再用另一个类,是为了方便代码调整。比如再定义 一个women类继承act接口,使$k->eat()实现women类的eat(),只需将倒数第二行改为$k=L::factory(new women());这是一种十分重要的设计模式


    man类在实现factory()时,形参由接口定义。而在类外使用factory()时,实参是已经实现了act接口的man类的对象。自定义的factory()方法返回act接口类的对象。可以直接使用接口的方法(因为方法已经由man类实现,而传入的实参是由man类的对象)

    c.  可以一个类实现多个接口

    class A implements act1,act2{

    xxxxxxxxxxx 

    ..........

    }

    (2)抽象类(abstract)---可以具体实现方法,也可以定义空方法。

    定义:abstract class xxx{

    public function eat(){

    xxxxxxxx...

    }

    public function sleep(){}  //此处与接口不同;

    }

    类extends抽象类

    (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) { } 

    相关文章

      网友评论

          本文标题:2019-01-16

          本文链接:https://www.haomeiwen.com/subject/bsdmdqtx.html