PHP教學-介面(Interface)

介面可以做的事

    可以擁有常數(const)成員
    可以有抽象方法(Interface所有方法都是抽象的,只是 不用宣告abstract關鍵字)
    類別可以定義多個介面
    介面可以衍生自另一個介面

可以擁有常數(const)成員

/**
 * 人(介面)
 */
interface Person
{
    // 可以擁有常數(const)成員
    const IS_AGE_PUBLIC = false;    // 年齡是絕不對外公開的
}

可以有抽象方法(Interface所有方法都是抽象的,只是 不用宣告abstract關鍵字)

/**
 * 人(介面)
 */
interface Person
{
  /**
   * 吃飯抽象方法
   */
  public function eat();

  /**
   * 睡覺抽象方法
   */
  public function sleep();
}

類別可以定義多個介面

人類(介面)

/**
 * 人類(介面)
 */
interface Human
{
  /**
   * 「笑」抽象方法
   */
  public function laugh();
}

人(介面)

/**
 * 人(介面)
 */
interface Person
{
  /**
   * 「吃飯」抽象方法
   */
  public function eat();

  /**
   * 「睡覺」抽象方法
   */
  public function sleep();
}

類別實作多個介面

/**
 * 女生類別
 */
class Girl implements Person, Human
{
  /**
   * 笑
   */
  public function laugh()
  {
      // 笑笑笑~
  }

  /**
   * 吃飯
   */
  public function eat()
  {
      // 吃吃吃~
  }

  /**
   * 睡覺
   */
  public function sleep()
  {
      // 睡睡睡~
  }
}

介面可以衍生自另一個介面

人類(介面)

/**
 * 人類(介面)
 */
interface Human
{
  /**
   * 「笑」抽象方法
   */
  public function laugh();
}

人(介面)延伸人類(介面)

/**
 * 人(介面)延伸人類(介面)
 */
interface Person extends Human
{
  /**
   * 「吃飯」抽象方法
   */
  public function eat();

  /**
   * 「睡覺」抽象方法
   */
  public function sleep();
}

介面不可以做的事

    不可以宣告屬性(attribute)成員
    不可以實例化(instance)
    不可以實作方法內容

不可以宣告屬性(attribute)成員

/**
 * 人(介面)
 */
interface Person
{
  // 不可以宣告屬性(attribute)成員
  // ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘

  // 人介面的個人屬性
  public $height;     // 身高是公開的
  protected $weight;  // 體重是保護的
  private $age;       // 年齡是秘密

  // 人介面共有的靜態屬性
  public static $INTEREST;        // 興趣是公開的
  protected static $APPEARANCE;   // 外表是保護的
  private static $CHARACTER;      // 性格是秘密的
}

不可以實例化(instance)

/**
 * 人(介面)
 */
interface Person
{
  /**
   * 「吃飯」抽象方法
   */
  public function eat();

  /**
   * 「睡覺」抽象方法
   */
  public function sleep();
}

// 不可以實例化(instance)
// ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘
$taiwan_person = new Person();

不可以實作方法內容

/**
 * 人(介面)
 */
interface Person
{
  // 不可以實作方法內容
  // ✘✘✘✘✘✘✘ ◢▆▅▄▃-崩╰(〒皿〒)╯潰-▃▄▅▆◣ ✘✘✘✘✘✘✘

  /**
   * 吃飯
   */
  public function eat()
  {
      // 吃吃吃~
  }

  /**
   * 睡覺
   */
  public function sleep()
  {
      // 睡睡睡~
  }
}

介面(Interface)使用時機

當「多個類別(Class)」之間有共同的方法(function),但方法實做的方式有差異,可以將這些共用「方法」寫成「介面(Interface)」,讓其他的「子類別(Class)」去實做這個介面

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json