淺析php介面操作interface關鍵字的用法及應用執行個體

來源:互聯網
上載者:User

介面是一種約束形式,其中只包括成員定義,不包含成員實現的內容。用介面(interface),你可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。 我們可以通過interface來定義一個介面,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。

介面中定義的所有方法都必須是public,這是介面的特性。

實現

  要實現一個介面,可以使用implements操作符。類中必須實現介面中定義的所有方法,否則會報一個fatal錯誤。如果要實現多個介面,可以用逗號來分隔多個介面的名稱。

    Note:  

    實現多個介面時,介面中的方法不能有重名。  

    Note:  

    介面也可以繼承,通過使用extends操作符。  

常量

介面中也可以定義常量。介面常量和類常量的使用完全相同。它們都是定值,不能被子類或子介面修改。


範例

Example #1 介面程式碼範例

<?php

// 聲明一個'iTemplate'介面
interface iTemplate
{
   public function setVariable($name, $var);
   public function getHtml($template);
}


// 實現介面
// 下面的寫法是正確的
class Template implements iTemplate
{
   private $vars = array();
 
   public function setVariable($name, $var)
   {
       $this->vars[$name] = $var;
   }
 
   public function getHtml($template)
   {
       foreach($this->vars as $name => $value) {
           $template = str_replace('{' . $name . '}', $value, $template);
       }

       return $template;
   }
}

// 下面的寫法是錯誤的,會報錯:
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
   private $vars = array();
 
   public function setVariable($name, $var)
   {
       $this->vars[$name] = $var;
   }
}
?>

Example #2 Extendable Interfaces

<?php
interface a
{
   public function foo();
}

interface b extends a
{
   public function baz(Baz $baz);
}

// 正確寫法
class c implements b
{
   public function foo()
   {
   }

   public function baz(Baz $baz)
   {
   }
}

// 錯誤寫法會導致一個fatal error
class d implements b
{
   public function foo()
   {
   }

   public function baz(Foo $foo)
   {
   }
}
?>

Example #3 多個介面間的繼承

<?php
interface a
{
   public function foo();
}

interface b
{
   public function bar();
}

interface c extends a, b
{
   public function baz();
}

class d implements c
{
   public function foo()
   {
   }

   public function bar()
   {
   }

   public function baz()
   {
   }
}
?>

Example #4 使用介面常量

<?php
interface a
{
   const b = 'Interface constant';
}

// 輸出介面常量
echo a::b;

// 錯誤寫法,因為常量的值不能被修改。介面常量的概念和類常量是一樣的。
class b implements a
{
   const b = 'Class constant';
}
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.