扫描二维码,下载安卓APP
下载安卓APP箭头
客服QQ
箭头给我发消息

客服QQ:2698585038
论坛 >编程语言 >深入 PHP 面向对象、模式与实践(1)

深入 PHP 面向对象、模式与实践(1)

为了部落发布于 2017-10-30 10:03查看:10990回复:1

    深入php面向对象、模式与实践

    1 语法

    1.1 基础语法

   clone

    需要操作原对象,但又不想影响原对象.

image.png

        基本数据类型和数组都为真复制,即为真副本,当属性为对象时,为假复制,改变副本仍会影响原对象.解决方案:

image.png

    __clone在clone前自动触发,可以执行一些在备份前的属性操作.

    &传递引用

       方法引用传递,改变源对象

image.png

      static延迟静态绑定

      应用场景:Dog类和Person类都需要一个返回实例化的方法,Dog类和Person类都继承于Animal抽象类.

image.png

    拦截器

  1. __get($property),访问未定义的属性时调用.

  2. __set($property,$value),给未定义的属性赋值时被调用.

  3. __isset($property),对未定义属性调用isset()方法时调用.

  4. __unset($property),对未定义属性调用unset()方法时调用.

  5. __call($method,$arg_array),调用未定义方法时调用.

  6. __call很有用,但要慎用,因为太灵活.

    应用场景:有一个专门打印Person类信息的Person_Writer类,如果通过Person类调用Person_Writer类.

image.png

  回调函数

    应用场景: 3个类,Product类,Product_Sale类,Product_Totalizer类,要实现:当卖出Product总共价格超过指定金额时,输出警告.

image.png

    get_class()instanceof

    get_class(类)用于判断是否精准等于类名;

    instanceof 可以判断是否其本身或继承于某父类.

       类中的方法和类中的属性

    get_class_methods('类名'):获取类中所有方法.

    get_class_vars('类名'):获取类中所有public参数;

        反射API

    

    2 模式

    2.1 组合

        问题:课堂类被演讲类和研讨会类继承着.但是演讲类和研讨类都要实现一次性计费和上N次课计费的方法.和输出计算的方式.

        解决方案1: 在课堂类中添加计算一次性付费的方法,上N次课的计费方法和输出计算方式的方法.

        解决方案2: 运用组合,将处理计费和输出计算方式单独封装为一个计费策略类.

image.png

image.png

        组合既委托.同级委托.

        继承既父子关系.

     3 生成对象

     3.1 单例模式

        确保系统中只有唯一一个用例.例如系统配置文件.

        重点

        1: 构造方法私有.

        2: 类本身包含自己的实例化属性.

image.png

image.png


     3.2 工厂模式

        通过一个父类,生产处多个不同功能的子类.

        特点:产品方(新浪微博)和需求方(显示新浪微博)一一对应.

        问题:印象笔记中,来源可能为新浪微博,或者开发者头条,在印象笔记显示的时候,两者的页眉和页尾是不一样的.

        image.png

     3.3 抽象模式

        RLGL!!!.印象笔记不只要显示新浪微博内容!!!还要显示我的新浪账号,还要该微博啊!!卧槽~憋着急,吻我.

        工厂模式主要用于生产一一对应的产品方和需求方,而抽象模式要做的是一个需求方(印象笔记_显示新浪微博),要多个工厂(把需求方抽象为多个需求方),例如提供新浪内容的工厂,提供新浪账号的工厂.提供微博内容的评论的工厂等.

image.png        代码:        

image.png

     3.4 平行模式

        当使用工厂/抽象模式必须要制定具体的创建者(需求方).

        平行模式和抽象模式的模型图一致,但代码实现不一样.

        抽象模式中父类均为抽象类,而平行模式中,所以类都为普通类,方便父类的实例化.

        在这里列出显示印象笔记类的实现代码

image.png

        其实大家可以发现,原型模式只不过只在最顶层类中包装了一下各组件子类而已,然而这样可以轻松的组合他们,例如实现一个显示新浪微博内容,但要显示开发者头条账号的需求?

收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • 课课家运营团队
    • Mr ken
    • YUI
    • cappuccino
    • mr jack
    • IT宅男
    • Mright
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: