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

posted on 2016-04-20 22:58  山山未迟 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lifushan/p/5414873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值