继承
extends 关键字来继承类
被继承的类,我们称之为父类
继承后的类,我们称之为子类
子类继承父类非私有的属性和方法
public 在本类,子类,以及类的外部都访问
protected 保护型的属性,自己以及子类能访问
private 私有的不能被继承,只能自己访问
子类可以访问父类的非私有的属性和方法, 使用$this关键字访问
覆盖:子类中声明与父类相同名称的属性和方法,
属性被覆盖后,就无法访问父类的属性
方法被覆盖后,依旧可以访问父类的方法 parent::方法名()
final修饰类和方法
被final修饰的类是不能被继承
被final修饰的方法不能被子类覆盖
static修饰属性和方法
属性
static修改的属性是可以修改的,是所有实例共享,也就是属于类,非静态的是每个对象都会保存一份不一样的
访问:本类中使用 self::$属性名 父类中使用 parent::$属性名
方法
static修饰的方法,它里面只能使用静态属性和静态方法,不能使用普通的属性和普通的方法
访问:类名::静态方法() self::静态方法()
静态方法和属性的用途,单例设计模式:
设计模式其实就是前人总结的一些规律
作为对象的创建模式,单例设计模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局提供这个单例,它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用
接口
声明
interface 接口名{
//方法是不能有实现
function 方法名();
}
实现接口
class 类名 implements 接口1,接口2{
//必须要实现接口中定义的方法,否则会报错
}
抽象类
声明
abstract class 类名{
//抽象类当中也可以包含有实现的方法
function 方法名(){
//
}
//抽象方法不能有实现,一个抽象类中必须要有一个抽象方法
abstract function 方法名();
}
使用
class 类 extends 抽象类{
//实现我们的抽象方法
function 方法名(){
}
}
魔术方法
__toString 当将对象直接输出时,会调用此魔术方法,此方法返回一个字符串
__call 当调用的方法不存在时
__callStatic 当调用的静态方法不存在时
__get 当访问不存在的属性
__set 当给不存在的属性赋值时