我们什么时候需要PHP中的接口?
接口是类(实现接口)必须实现的公共 API 的定义。它也被称为契约,因为接口允许指定类必须实现的方法列表。接口定义与类定义类似,只是将关键字class改为interface。
例子:
php
php
php
// Function to Implements more than one
// interface by single class.
class MyClass implements IMyInterface {
public function method_1() {
// method_1 implementation
}
public function method_2() {
// method_2 implementation
}
}
php
interface Foo {
}
interface Bar {
}
interface Bass extends Foo, Bar {
}
php
color;
}
public function setColor($color) {
$this->color = $color;
}
public function describe() {
return sprintf("GeeksforGeeks %s %s\n",
$this->getColor(), get_class($this));
}
}
$triangle = new Triangle();
// Set the color
$triangle->setColor('green');
// Print out the value of the describe common
// method provided by the abstract class will
// print out out "I am an Orange Triangle"
print $triangle->describe();
?>
接口可以包含方法和/或常量,但不包含属性。接口常量与类常量具有相同的限制。接口方法是隐式抽象的。
例子:
PHP
任何需要实现接口的类都必须使用 implements 关键字。一个类一次可以实现多个接口。
PHP
// Function to Implements more than one
// interface by single class.
class MyClass implements IMyInterface {
public function method_1() {
// method_1 implementation
}
public function method_2() {
// method_2 implementation
}
}
有趣的点:
- 一个类不能实现两个具有相同方法名称的接口,因为它最终会导致方法不明确。
- 像类一样,可以通过使用相同的关键字“extends”在接口之间建立继承关系。
例子:
PHP
interface Foo {
}
interface Bar {
}
interface Bass extends Foo, Bar {
}
下面是一个完整的例子,展示了接口是如何工作的。
例子:
PHP
color;
}
public function setColor($color) {
$this->color = $color;
}
public function describe() {
return sprintf("GeeksforGeeks %s %s\n",
$this->getColor(), get_class($this));
}
}
$triangle = new Triangle();
// Set the color
$triangle->setColor('green');
// Print out the value of the describe common
// method provided by the abstract class will
// print out out "I am an Orange Triangle"
print $triangle->describe();
?>
输出:
GeeksforGeeks green Triangle
使用接口的重要性:
- 接口提供了一个灵活的基础/根结构,这是类所没有的。
- 通过实现接口,对象的调用者只需要关心对象的接口而不是对象方法的实现。
- 接口允许不相关的类实现相同的方法集,而不管它们在类继承层次结构中的位置。
- 接口使您能够对多重继承进行建模。