• 20150110--魔术方法魔术常量+面向对象-02


    设计模式

    1. 什么是设计模式?

    指的是一种已经成熟话的设计规范,通过这种规范,能够达到某种指定的要实现的效果。

    php中,只有简单的设计模式:单例模式,工厂模式

    单例模式

    1. 什么是单例模式?

    单例模式,只有一个实例(对象),一个类只能产生一个对象。

    要实现单例模式,必须解决以下问题

    1. 确定有哪些方式可以产生新的对象:new和clone,必须禁用这两种方法:私有化构造方法和克隆方法

    clip_image002

    2. 如何在封闭了外部产生对象的途径之后,进入到内部产生?解决方案:静态方法,可以不需要在外部创建对象的前提下,可以进入到类的内部。

    clip_image004

    3. 如何在内的内部要得到对象?解决方案:在静态方法中可以创建对象

    clip_image006

    问题:该静态方法可以被多次调用,因此会产生多个对象

    clip_image008

    4. 解决方案:增加一个静态属性用来保存生成的对象,如果后面再次新增对象的话,得先判断对象是否存在,存在就不创建。

    clip_image010

    效果

    clip_image012

    对象判断方式:instanceof,判断一个对象是否属于某个类

    clip_image014

    总结:单例模式要实现:三私一公(私有化构造方法,私有化克隆方法,私有化静态属性,公有化的静态方法)

    工厂模式

    1. 什么工厂模式?

    类似工厂一样,需要什么类的对象,就产生对应类的对象。

    工厂模式要实现:能够生产对象,能够加载类。

    clip_image016

    PHP是一种既支持面向过程又支持面向对象的语言。不是所有的面向对象语言都有类的概念,如js。(可以忽略)

    clip_image018

    面向对象三大特点

    面向对象的三大特点:封装,继承和多态

    封装

    封装:面向将数据(属性)以及对数据的操作(方法)捆绑到一起,形成对外的数据隐藏。只对外提供可以调用的接口供其使用。(public的方法和属性)

    封装的过程称之为抽象:将具有相同特性的一类事务,把公共的内容抽离出来,形成文字描述的过程。

    继承

    继承:子辈拥有父辈的财富(属性)或者工作(方法)

    如果一个类已经定义好可以使用的方法和属性了,但是有一个类想在该类的基础上进行扩展。扩展类就可以从已有的类继承,将已有的属性和方法都直接应用,而不用自己再去定义。

    继承的优点

    1. 便于扩展(子类可以在父类的基础上增加自己的特点)

    2. 节省代码:提高代码的复用性

    父类

    class Father{

    //财富(属性)money

    //工作(方法):makeMoney();

    }

    子类:继承

    class Son extends Father{

    //没有自己工作,继承父亲的工作:makeMoney()

    }

    多态

    多态:多种形态,在存在继承的情况下,子类必须重写父类的方法(子类拥有与父类同名的方法)

    父类

    class Father{

    function makeMoney(){

    //种树

    }

    }

    子类:继承自父类

    class Son extends Father{

    function makeMoney(){

    //卖菜

    }

    }

    //模拟Java

    Father father = new Son();

    father.makeMoney(); //卖菜

    PHP继承

    继承:子类可以使用父类的属性和方法。

    继承语法

    父类:拥有一些可以被继承的属性和方法

    子类:想拥有自己不存在但是在别的类中存在的属性和方法

    关键字:extends

    子类 extends 父类

    clip_image020

    继承属性的访问(类内):公有的和受保护的都可以

    clip_image022

    继承属性的访问(类外):只有公有的可以

    clip_image024

    继承内容

    继承中不讲静态的继承,php中的继承是子类对象继承父类的对象。(静态的属性和方法也依然满足继承条件,可以使用)

    子类会继承父类的所有的属性(非静态)和非私有的方法(非静态)

    clip_image026

    protected

    受保护的,是一个专门用于继承的关键字(访问修饰限定符),用protected关键字修饰的属性或者方法,可以在子类中直接使用,但是不能在子类的外部使用。

    双向继承

    继承默认的是子类继承父类,但是其实在父类里面也可以同样的使用子类里面的属性和方法,只要满足(public和protected),所以认为继承是双向的。

    clip_image028

    重写

    子类拥有与父类同名的属性或者方法,就会覆盖父类的属性或者方法。

    属性重写

    clip_image030

    重写的效果

    clip_image032

    继承内存分析

    clip_image034

  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/lifushan/p/5414873.html
Copyright © 2020-2023  润新知