php抽象类和接口简介

- 2 mins

PHP抽象类(abstract class)和接口(interface)简介

抽象类(abstract class)

/**
* 执行
*
* @return mixed
* @throws Throwable
*/
abstract public function run();
/**
* Execute the job.
*
* @return void
* @throws Throwable
*/
final public function handle()
{
    //
}

  (1)如果 A 中 abstract_func() 声明为 public ,那么 B 中 abstract_func() 的声明只能是 public ,不能是 protected 或 private

  (2)如果 A 中 abstract_func() 声明为 protected ,那么 B 中 abstract_func() 的声明可以是 public 或 protected ,但不能是 private

  (3)如果 A 中 abstract_func() 声明为 private ,嘿嘿,不能定义为 private 哦!( Fatal error : Abstract function A::abstract_func() cannot be declared private )

接口(interface)

    1.格式:普通类引用接口
    class MyPc implements demo , demo2 , demo3 { 
    ... 
    }
    2.格式:抽象类应用接口例子
    abstract class MyPc implements demo , demo2 , demo3 { 
    ... 
    }
    3.格式:继承父类引用接口并存
    class MyPc extends Root implements demo , demo2 , demo3 { 
    ... 
    }
    先继承后接口,单继承多接口。

    4.格式:接口与接口的继承
    interface demo3 extends demo { 
    ... 
    }

抽象类和接口的异同

相同点:

不同点:

这个选择有两点含义:

  • a) abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子类必须实现。那些没有 abstract 的方法,在 abstract class 中必须定义方法体;
  • b) abstract class 的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

interface 的应用场合

abstract class 的应用场合

  一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora