首頁  >  文章  >  後端開發  >  php物件介面

php物件介面

伊谢尔伦
伊谢尔伦原創
2016-11-23 14:08:441087瀏覽

使用介面(interface),可以指定某個類別必須實作哪些方法,但不需要定義這些方法的具體內容。

介面是透過 interface 關鍵字來定義的,就像定義一個標準的類別一樣,但其中定義所有的方法都是空的。

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

實作(implements)

要實作一個接口,使用 implements 操作子。類別中必須實作介面中定義的所有方法,否則會報一個致命錯誤。類別可以實作多個接口,用逗號來分隔多個接口的名稱。

Note:

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

Note:

介面也可以繼承,透過使用 extends 運算子。

Note:

類別要實現接口,必須使用和接口中所定義的方法完全一致的方式。否則會導致致命錯誤。

常數

介面中也可以定義常數。介面常數和類別常數的使用完全相同,但是不能被子類別或子介面所覆蓋。

範例

Example #1 介面範例

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;
    }
}
//下面的写法是错误的,会报错,因为没有实现getHtml()
class BadTemplate implements ITemplate
{
    private $vars = array();
    public function setVariable($name,$var)
    {
        $this->vars[$name] = $var;
    }
}

Example #2 可擴充的介面

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){}
}
//错误写法
class d implements b
{
    public function foo(){}
    public function baz(Foo $foo){}
}

Example #3 繼承多個介面

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 #4448一個很好的方式來確保某個物件包含有某些方法。參見 instanceof 操作符和類型約束。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn