抽象类
关键字:abstract
含有抽象方法,(抽象方法必须包含在抽象类里,但抽象类不一定含有抽象方法)。
抽象方法:未被实现的方法,(加 abstract ,子类继承必须实现该方法)。
abstract class Usb{ public function load(){ echo "usb is loading"; } abstract public function unload();//抽象方法 } class Upan extends Usb{ public function unload(){//子类中必须实现父类的抽象方法,否则报错 echo "usb is unloading"; } }
接口
关键字:interface
只含有抽象方法,不能含有普通方法 (接口中的方法都是抽象方法,所以不用写abstract)
继承用implements
//接口 interface Usb1{ public function load(); } //接口扩展 interface Usb2 extends Usb1{//接口也可以继承其他的接口 public function run(); } class Upan1 implements Usb2{ public function load(){ echo "usb is load"; } public function run(){ echo "usb is run"; } }
魔术方法:
__construct 构造方法
__destruct 析构方法
__call 当调用不存在或无权访问的方法时,会自动调用该方法
class Parents{ //call()必须带两个参数,第一个为调用的不存在的方法名,第二个为方法里的参数 数组。 public function __call($i,$j){ echo '不存在'.$i; var_dump($j); } } $p1 = new Parents(); $p1->b('abc');
__get 当调用无权访问的属性时,自动调用该方法
必须带一个参数,为不存在的属性名
__set 类中某属性,对象无权操作(即不能设置值)时,自动调用该方法
必须带两个参数,分别为无权操作的属性名,设置的值。
__isset 当用isset()判断一个属性或方法存在与否时,自动触发__isset()
必带一个参数,为变量名
class Parents{ private $a; public function __isset($i){ echo'无权判断变量是否存在'.$i; } } $p1 = new Parents(); $p2=isset($p1->a);
__unset 当用unset()删除一个属性或方法时,自动触发__unset()
必带一个参数,为变量名
__toString 调用这个类时会执行这个函数,return 输出这个类的说明。