抽象类,接口,魔术方法

抽象类

  关键字: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 输出这个类的说明。

原文地址:https://www.cnblogs.com/SSs1995/p/9350519.html