Mithilfe einer Schnittstelle können Sie angeben, welche Methoden eine Klasse implementieren muss, müssen diese jedoch nicht definieren sie Der spezifische Inhalt der Methode. Eine Schnittstelle wird über das Schlüsselwort interface definiert, genau wie die Definition einer Standardklasse, aber alle darin definierten Methoden sind leer. Alle in einer Schnittstelle definierten Methoden müssen öffentlich sein. Dies ist eine Eigenschaft von Schnittstellen.
Um eine Schnittstelle zu implementieren, verwenden Sie den implementierten 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.
Hinweis1: Bei der Implementierung mehrerer Schnittstellen dürfen Methoden in den Schnittstellen nicht denselben Namen haben.
Hinweis2: Schnittstellen können auch vererbt werden, indem der Operator extends verwendet wird.
Vererbung ist eine bekannte Programmierfunktion, und auch das Objektmodell von PHP verwendet Vererbung. Die Vererbung wirkt sich auf die Beziehung zwischen Klassen und Objekten sowie zwischen Objekten aus. Wenn Sie beispielsweise eine Klasse erweitern, erbt die Unterklasse alle öffentlichen und geschützten Methoden der übergeordneten Klasse. Sofern die Unterklasse die Methode der übergeordneten Klasse nicht überschreibt, behält die geerbte Methode ihre ursprüngliche Funktionalität. Vererbung ist für das funktionale Design und die Abstraktion sehr nützlich, und durch das Hinzufügen neuer Funktionen zu ähnlichen Objekten entfällt die Notwendigkeit, diese gemeinsamen Funktionen neu zu schreiben.
Hinweis3: Sofern Autoloading nicht verwendet wird, muss vor der Verwendung eine Klasse definiert werden. Wenn eine Klasse eine andere erweitert, muss die übergeordnete Klasse vor der untergeordneten Klasse deklariert werden. Diese Regel gilt für Klassen, die andere Klassen und Schnittstellen erben.
Hinweis:4: Um eine Schnittstelle zu implementieren, muss eine Klasse Methoden verwenden, die genau den in der Schnittstelle definierten Methoden entsprechen. Andernfalls kommt es zu einem schwerwiegenden Fehler.
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.
Sie können Werte, die in einer Klasse unverändert bleiben, als Konstanten definieren. Beim Definieren und Verwenden von Konstanten ist die Verwendung des Symbols nicht erforderlich. Der Wert einer Konstante muss ein fester Wert sein und darf keine Variable, kein Klassenattribut, das Ergebnis einer mathematischen Operation oder ein Funktionsaufruf sein. Konstanten können auch in Schnittstellen definiert werden.
Schnittstellenbeispiel:
Beispiel #1 Schnittstellenbeispiel
<?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; } } // 下面的写法是错误的,会报错,因为没有实现 getHtml(): // 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; } } ?>
Beispiel #2 Erweiterbare Schnittstelle
<?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) { } } // 错误写法会导致一个致命错误 class d implements b { public function foo() { } public function baz(Foo $foo) { } } ?>
Beispiel #3 Mehrere Schnittstellen erben
<?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() { } } ?>
Beispiel #4 Verwendung von Schnittstellenkonstanten
<?php interface a { const b = 'Interface constant'; } // 输出接口常量 echo a::b; // 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。 class b implements a { const b = 'Class constant'; } ?>
Das obige ist der detaillierte Inhalt vonWas ist die PHP-Objektschnittstelle? Detaillierte Erläuterung verschiedener Klassenschnittstellencodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!