PHP Portal » PHP Handbuch » Interfaces

Werbung

Interfaces


Interfaces erlauben die Erzeugung von Code, der spezifiziert, welche Methoden eine Klasse implementieren muss, ohne definieren zu müssen, wie diese Methoden behandelt werden.

Interfaces werden mit dem interface Schlüsselwort auf die selbe Weise wie eine Standardklasse definiert, ohne dass eine der Methoden ihren Inhalt definiert.

Alle in einem Interface deklarierten Methoden müssen public sein, dies liegt in der Natur eines Interfaces.

implements

Um ein Interface zu implementieren, wird der implements-Operator benutzt. Alle Methoden des Interfaces müssen innerhalb der Klasse implementiert werden; Unterlassung wird zu einem fatalen Fehler führen. Klassen dürfen, falls dies gewünscht wird, mehr als ein Interface implementieren, indem man die Interfaces voneinander mit einem Komma abtrennt.

Hinweis: Eine Klasse kann nicht zwei Interfaces, die sich identische Funktionsnamen teilen, implementieren, da dies zu Doppeldeutigkeiten führen würde.

Hinweis: Ein Interface kann ebenso wie eine Klasse mit Hilfe des Schlüsselwortes extends erweitert werden.

Konstanten

Ein Interface kann Konstanten definieren. Interface-Konstanten funktionieren genauso wie Klassenkonstanten. Eine Interfacekonstante kann von anderen Interfaces oder Klassen, die von diesem Interface erben, nicht verändert werden.

Beispiele

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Deklariere das Interface 'iTemplate' interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // Implementiere das Interface // Dies funktioniert 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; } } // Dies wird nicht funktionieren // 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; } }

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
interface a public function foo(); interface b extends a { public function baz(Baz $baz); } // Dies Funktioniert class c implements b { public function foo() { } public function baz(Baz $baz) { } } // Dies funktioniert nicht und führt zu einem fatalen Fehler class d implements b { public function foo() { } public function baz(Foo $foo) { } }

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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() { } }

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface a { const b = 'Interface constant'; } // Ausgabe: Interface constant echo a::b; // Der folgende Abschnitt wird nicht funktionieren, da // ein Überschreiben der Konstanten nicht gestattet ist. // Dies ist das gleiche Konzept wie bei Klassenkonstanten. class b implements a { const b = 'Class constant'; }

Siehe auch den instanceof-Operator.