嚙合/界面
使用接口,可以指定壹個類必須實現哪些方法,但不需要定義這些方法的具體內容。
我們可以通過interface定義壹個接口,就像定義壹個標準類壹樣,但是裏面定義的方法都是空的。
接口中定義的所有方法都必須是公共的,這是接口的特點。
實現
要實現接口,可以使用implements運算符。接口中定義的所有方法都必須在類中實現,否則將報告致命錯誤。如果要實現多個接口,可以用逗號分隔多個接口的名稱。
註意:
當實現多個接口時,接口中的方法不能有重復的名稱。
註意:
也可以通過使用extends運算符來繼承接口。
常數
常量也可以在接口中定義。接口常量和類常量的用法完全相同。它們都是固定值,不能被子類或子接口修改。
模型
示例#1接口代碼示例
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
//聲明壹個“iTemplate”接口。
接口項目板
{
公共函數setVariable($name,$ var);
公共函數get html($ template);
}
//實現接口
//以下寫法正確。
類模板實現iTemplate
{
private $ vars = array();
公共函數setVariable($name,$var)
{
$ this-& gt;vars[$ name]= $ var;
}
公共函數getHtml($template)
{
foreach($ this-& gt;變量作為$ name = & gt$value) {
$template = str_replace('{ '。$name。} ',$value,$ template);
}
返回$ template
}
}
//下面寫的不對,會報錯:
//致命錯誤:BadTemplate類包含1個抽象方法
//因此必須聲明為抽象的(iTemplate::getHtml)
BadTemplate類實現iTemplate
{
private $ vars = array();
公共函數setVariable($name,$var)
{
$ this-& gt;vars[$ name]= $ var;
}
}
& gt
示例#2可擴展接口
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
接口a
{
公共函數foo();
}
接口b擴展了a
{
公共函數Baz(Baz $ Baz);
}
//拼寫正確
c類實現b
{
公共函數foo()
{
}
公共職能baz(Baz $baz)
{
}
}
//寫錯了會導致致命錯誤。
d類實現b
{
公共函數foo()
{
}
公共函數baz(Foo $foo)
{
}
}
& gt
示例#3多個接口之間的繼承
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
接口a
{
公共函數foo();
}
接口b
{
公共功能欄();
}
接口c擴展了a、b
{
公共函數baz();
}
d類實現c
{
公共函數foo()
{
}
公共功能欄()
{
}
公共函數baz()
{
}
}
& gt
例4使用了接口常量。
& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)
接口a
{
const b = '接口常數';
}
//輸出接口常數
echo a::b;
//寫錯了,因為常量的值不能修改。接口常量的概念與類常量的概念相同。
類b實現了壹個
{
const b = '類常數';
}
& gt
也可以看看instanceof關鍵字的文檔。