PHP 为什么我们需要接口
接口是PHP的另一个特性,使开发人员能够构建没有任何复杂方法的程序。它继承了类所具有的相同的公共方法。由于这些特性,接口可以定义方法。但我们不能在接口中定义方法,我们必须在调用接口的子类中定义方法。接口与类也类似,唯一的区别是类被接口修改,并且方法中没有定义任何内容。我们在PHP中使用接口。
一个类不能实现两个具有相同方法名的函数,否则编译器将返回错误。类似于traits,我们还可以使用接口来实现多继承,因为一个类可以初始化多个接口,这最终将有助于从多个父类继承traits。
示例
<!DOCTYPE html>
<html>
<body>
<?php
interface fruit {
public function taste();
}
class mango implements fruit {
public function taste() {
echo "very sweet !!!";
}
}
fru = new mango();fru->taste();
?>
</body>
</html>
输出:
very sweet !!!
在以上的程序中,我们声明了一个名为fruit的接口,内部有一个名为taste()的函数。我们声明了一个名为mango的类,并将接口fruit分配给它;我们定义了函数taste()。最后,我们创建了一个名为all的对象,称为我们的子类。由于接口的存在,我们的子类mango可以访问接口fruit,并从中检索函数taste()。
使用接口的用途:
1)继承父类的属性 为了使用类实现接口,我们必须使用implement关键字和expand关键字来分配父类的层次结构。
语法:
Class parent - class{
Statement . . .
. . . . . . . .
. . . . . . . .
}
Interface interface - name {
Statement . . .
. . . . . . . .
. . . . . . . .
Function return type ()
}
Class child - class expands parent - class implements interface - name{
Function return type(){
Function description. .
. . . . . . . . . . . .
}
}
示例:
<?php
class parentClass {
public function parentFunction() {
echo "this is the first class";
}
}
interface firstInterface {
public function interfaceFunction();
}
class childClass extends parentClass implements firstInterface {
function interfaceFunction() {
echo " this is interface which is defined inside child class";
}
public function childFunction() {
echo " this is inherited child class using interface ";
}
}
obj = new childClass(); obj -> parentFunction();
obj -> interfaceFunction(); obj -> childFunction();
?>
输出:
this is the first class
this is interface which is defined inside child class
this is an inherited child class using an interface
在上面的程序中,我们有一个名为parentClass的父类,它包含一个名为parentFunction()的函数。我们还有一个名为firstInterface的接口,其中包含名为interfaceFunction()的函数。然而,我们无法在创建的接口内定义声明的函数,我们必须在子类内定义声明的函数。最后,我们有一个名为childClass的子类,它具有函数childFunction(),并通过PHP的extends和implement属性继承了接口中的函数。此外,我们在子类中定义了interfaceFunction()。为了访问这些类和接口,我们创建了一个名为obj的对象,并使用该对象调用了所有的函数。
2) 继承多个接口的属性 要使用类实现接口,我们必须使用implement关键字,并且一个类甚至可以同时实现多个接口。
Interface first - interface {
Statement . . .
. . . . . . . .
Function return one ()
}
Interface second - interface {
Statement . . .
. . . . . . . .
Function return two ()
}
Class child - class implements first - interface, second - interface {
Statement . . .
. . . . . . . .
Function return one(){
Function description. .
. . . . . . . . . . . .
}
Function return two(){
Function description. .
. . . . . . . . . . . .
}
}
示例:
<?php
interface firstInterface {
public function interfaceone();
}
interface secondInterface {
public function interfacetwo();
}
class childClass implements firstInterface, secondInterface {
function interfaceone() {
echo "this is the first interface";
}
function interfacetwo() {
echo "this is the second interface";
}
public function childFunction()
{
echo "this is child inherited from both interfaces";
}
}
obj = new childClass();obj->interfaceone();
obj->interfacetwo();obj->childFunction();
?>
输出:
this is the first interface
this is the second interface
this is a child inherited from both interfaces
在上面的程序中,我们声明了两个接口,第一个接口的名称是 firstInterface ,具有函数 interfaceone() ;第二个接口的名称是 secondInterface ,具有函数 onterfacetwo() 。然而,我们只声明了接口函数,并且将在子类中定义相同的函数 。 最后,我们有一个子类,名称是 childClass ,具有函数 childFunction() ,并使用 implements 子句继承了这两个接口。在函数内部,我们为接口中声明的函数给出了定义 。 为了访问类和接口,我们创建了一个名为obj的对象,并使用相同的对象调用了所有的函数。
使用接口的重要性:
- 接口提供给开发者一种更结构化的格式,这在类中很难实现。
- 我们可以在单线程编程语言(如PHP)中使用接口轻松实现面向对象编程的多重继承属性。
- 通过实现接口,对象的调用者只需要关注对象的接口,而不是对象方法的实现。
- 接口允许不相关的类实现相同的方法,而不管它们在类继承层次结构中的位置如何。
- 我们不能使用相同的方法名实现多个接口,否则会导致混淆和方法的歧义。
- 我们可以使用 extend 关键字轻松地在两个类之间建立层次结构。