类权限修饰符:public,protected,private
类的三个特性:封装,继承,多态
封装:数据封装就是将实例变量隐藏起来,不能直接访问实例变量
继承:单一继承,只能继承一个父类;方法重写,子类方法名称与父类方法名称重复,会覆盖父类方法,不想覆盖可以使用“parent::funcName()”。
多态:抽象类的定义abstract;接口类的定义interface
抽象类:抽象的类不能被实例化,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。(抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,非抽象子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松),此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。
抽象方法不能定义为私有。抽象类可以继承抽象类,且不能重写抽象父类的抽象方法。
接口类:可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性,protected和private会报错。
常量:接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。
要实现一个接口,使用 implements 操作符。非抽象类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称(实现多个接口时,接口中的方法不能有重名)。接口也可以继承,通过使用 extends 操作符。类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。
抽象类实现接口,且可以不实现其中的方法。
可以同时继承抽象类和实现接口,extends要写在前面。
interface Play{
const LEVEL=10;
public functionPlayLOL();
public functionPlayFootball();
}
interface Read{
public functionReadNovel();
}
abstract class Human{
abstract functioneat();
}
abstract classSutdentextendsHumanimplementsPlay,Read{
abstract functionstudy();
}
魔术方法:__construct,__destruct,__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__clone()
设计模式:工厂模式,单例模式,注册树模式,适配器模式,观察者模式,策略模式。