类的继承
有个类A有某些特征,有个类B有类A的所有特性,并且有自己的一些特性,那就可以说类B继承类A。
概念:
继承:一个类从另一个已有的类获取其特性,称为继承
派生:从一个已有的类产生一个新的类,称为派生。
//继承与派生只是从不同角度表述,本质是同一件事
父类/子类:已有类称为父类,派生出的类为子类。父类也叫‘基类’,子类也叫‘派生类’。
单继承:一个只能从一个上级类继承其特性信息,php大多数是单继承。
扩展: 在子类中再来定义自己的新的特有的特性信息;没有扩展,继承没有意义。
访问(权限)修饰符:
public:公共,共有,公开;protected:受保护的;private:私有的。
public:用此修饰符修饰的成员可以在任何位置访问或使用;
访问,使用语法:对象->成员//类名::成员。
访问位置分三种:类的内部;类的具有继承关系的类的内部;类的外部
protected:用此修饰符修饰的成员可以在当前类或者当前类的上下级具有继承关系类中访问。
private:用此修饰符修饰的成员只能在当前所在类中使用
parent代表父类:通常用在子类吊用父类成员时使用,多数通常使用父类的‘静态类’成员
构造方法与析构方法在继承中的表现:如果子类没有定义构造方法,会自动调用父类构造方法;如果子类定义了自己的构造方法,则不会调用父类的构造方法,但是可以手动调用: parent::__construct();析构方法与构造方法同理,手动调用:parent::__destruct();
重写override(发生在继承里的):又叫覆盖,将父类继承下来的属性或方法重新定义,直白点就是重新写。注意:子类覆盖父类的方法,虽然可以去调用父类的同名方法去完成一定的工作,但不是必须的,也有可能父类的该方法所执行的结果并不适合子类,此时子类就完全自己写方法了。
重写的基本要求:
访问控制权限:下级的访问控制权限应该不低于上级的访问权限:
比如 下级:public 上级:只能是pulic
私有的不能覆盖,而是完全当做自己全新的。
私有属性和私有方法的重写问题:
私有属性和私有方法不能覆盖,但其实子类可以定义跟父类私有的同名属性或者方法。只是当做一个自身的新的属性或者方法来看待。方法的参数必须一致。
构造方法的重写问题:
构造方法不但可以像其他方法一样重写,而且比普通方法更宽松,重写的时候参数可以不一致。
最终类 final class:
一般情况下,一个类没有特别声明的话,别人是可以随便拿来使用并且对它进行扩展或者继承;如果某个类不希望进行扩展,则可以生命为“最终类”;
形式: final calss 类名{ 类定义 }
最终方法 final method:
一般情况下,一个方法如果没有特别生命,则下级类就可以对其进行覆盖(重写);如果这个方法不希望被覆盖,可以生命为最终方法。
形式:final function 方法名(){ 方法定义 }
设计模式
什么叫设计模式:就是一些好的方法的总结
工厂模式:设计一个类(工厂),这个类的任务就是为我们自己生产各种对象。这种累只要指定类名,就可以获取一个类的对象。
单例模式:
对于某些类,被使用的时候,从头到尾(程序开始运行->运行结束),只需要一个对象就可以完成所有任务。
单例:某个类只允许创建出一个对象,即使进行多次创建也只能得到一个对象。
在php语言中一个对象可以使用clone 运算符进行克隆,也会生成新对象(单例模式下需要类中使用私有化措施来禁止克隆)。
抽象类丶抽象方法
抽象类:正常定义类的前面加上关键字:abstract ;
abstract class 类名{类的定义}
抽象类可以用来规范一下类的共同特征,不需要进行实例化,通过继承来进行规范;抽象类专门作为父类;子类继承抽象类的特性,这就是规范作用。
抽象方法:没有方法体(不需要大括号)的方法定义‘头’而已。
需要在前边加上关键字:abstract。比如:abstreact function f1($x1,$x2); //分号结束一定要有
作用:配合抽象类,实现对下级的行为规范,这个方法由下级去完成。
抽象类方法细节关系
1.如果方法定义为抽象方法,所属的类必须是抽象类
2.抽象类中可以没有抽象方法-----通常意义不大
3.子类继承自一个抽象类,则子类不许实现父类中的抽象方法,除非子类也是抽象类
4.子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也必须一致,简单来说就是重写,所以要满足重写的要求。