Mithilfe einer Schnittstelle können Sie angeben, welche Methoden eine Klasse implementieren muss, Sie müssen jedoch nicht den spezifischen Inhalt dieser Methoden definieren.
Die Schnittstelle wird über das Schlüsselwort interface definiert, genau wie die Definition einer Standardklasse, aber alle darin definierten Methoden sind leer.
Alle in der Schnittstelle definierten Methoden müssen öffentlich sein. Dies ist eine Eigenschaft der Schnittstelle.
implementiert
Um eine Schnittstelle zu implementieren, verwenden Sie den Implements-Operator. Die Klasse muss alle in der Schnittstelle definierten Methoden implementieren, andernfalls wird ein schwerwiegender Fehler gemeldet. Eine Klasse kann mehrere Schnittstellen implementieren. Verwenden Sie Kommas, um die Namen mehrerer Schnittstellen zu trennen.
Hinweis:
Bei der Implementierung mehrerer Schnittstellen dürfen Methoden in den Schnittstellen nicht denselben Namen haben.
Hinweis: Die
-Schnittstelle kann auch geerbt werden, indem der Extens-Operator verwendet wird.
Hinweis:
Um eine Schnittstelle zu implementieren, muss eine Klasse die in der Schnittstelle definierten Methoden auf genau die gleiche Weise verwenden. Andernfalls kommt es zu einem schwerwiegenden Fehler.
Konstanten
Konstanten können auch in der Schnittstelle definiert werden. Schnittstellenkonstanten werden genauso verwendet wie Klassenkonstanten, können jedoch nicht von Unterklassen oder Unterschnittstellen überschrieben werden.
Beispiel
Beispiel Nr. 1 Schnittstellenbeispiel
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; } }
Beispiel Nr. 2 Erweiterbare Schnittstelle
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){} }
Beispiel Nr. 3 Erben mehrerer Schnittstellen
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(){} }
Beispiel #4 Verwendung von Schnittstellenkonstanten
interface a { const b = 1; } //输出接口常量 echo a::b; //错误写法 class b implements a { const b = 1; }
Schnittstellen- und Typeinschränkungen bieten eine gute Möglichkeit, sicherzustellen, dass ein Objekt bestimmte Methoden enthält. Siehe Instanzoperator- und Typeinschränkungen.