设计模式
1. 什么是设计模式?
指的是一种已经成熟话的设计规范,通过这种规范,能够达到某种指定的要实现的效果。
php中,只有简单的设计模式:单例模式,工厂模式
单例模式
1. 什么是单例模式?
单例模式,只有一个实例(对象),一个类只能产生一个对象。
要实现单例模式,必须解决以下问题
1. 确定有哪些方式可以产生新的对象:new和clone,必须禁用这两种方法:私有化构造方法和克隆方法
2. 如何在封闭了外部产生对象的途径之后,进入到内部产生?解决方案:静态方法,可以不需要在外部创建对象的前提下,可以进入到类的内部。
3. 如何在内的内部要得到对象?解决方案:在静态方法中可以创建对象
问题:该静态方法可以被多次调用,因此会产生多个对象
4. 解决方案:增加一个静态属性用来保存生成的对象,如果后面再次新增对象的话,得先判断对象是否存在,存在就不创建。
效果
对象判断方式:instanceof,判断一个对象是否属于某个类
总结:单例模式要实现:三私一公(私有化构造方法,私有化克隆方法,私有化静态属性,公有化的静态方法)
工厂模式
1. 什么工厂模式?
类似工厂一样,需要什么类的对象,就产生对应类的对象。
工厂模式要实现:能够生产对象,能够加载类。
PHP是一种既支持面向过程又支持面向对象的语言。不是所有的面向对象语言都有类的概念,如js。(可以忽略)
面向对象三大特点
面向对象的三大特点:封装,继承和多态
封装
封装:面向将数据(属性)以及对数据的操作(方法)捆绑到一起,形成对外的数据隐藏。只对外提供可以调用的接口供其使用。(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 父类
继承属性的访问(类内):公有的和受保护的都可以
继承属性的访问(类外):只有公有的可以
继承内容
继承中不讲静态的继承,php中的继承是子类对象继承父类的对象。(静态的属性和方法也依然满足继承条件,可以使用)
子类会继承父类的所有的属性(非静态)和非私有的方法(非静态)
protected
受保护的,是一个专门用于继承的关键字(访问修饰限定符),用protected关键字修饰的属性或者方法,可以在子类中直接使用,但是不能在子类的外部使用。
双向继承
继承默认的是子类继承父类,但是其实在父类里面也可以同样的使用子类里面的属性和方法,只要满足(public和protected),所以认为继承是双向的。
重写
子类拥有与父类同名的属性或者方法,就会覆盖父类的属性或者方法。
属性重写
重写的效果