PHP OOP-接口
时间:2020-02-23 14:42:02 来源:igfitidea点击:
在本教程中,我们将学习有关PHP接口的信息。
什么是接口?
在OOP中,接口是公共方法的集合,这些公共方法必须由使用它们的类来实现。
如何创建接口?
我们使用interface关键字创建一个接口。
在下面的示例中,我们创建了一个接口ISample,它具有两个公共方法foo()和wow()。
接口必须始终包含公共方法。
interface ISample {
public function foo();
public function wow($text);
}
按照惯例,将大写I放在接口名称之前。
您也可以放小i。
如何实现接口?
当我们希望一个类实现一个接口时,我们使用关键字" implements"。
在下面的示例中,我们有一个具有公共方法foo()和wow()的接口ISample,还有一个实现接口ISample的Po类。
//interface
interface ISample {
public function foo();
public function wow($text);
}
//class implementing the interface
class Po implements ISample {
//implement methods of ISample
public function foo() {
printf("Inside foo...");
}
public function wow($text) {
printf("Inside wow... text = %s", $text);
}
}
//creating object of Po
$obj = new Po();
$obj->foo(); //this will print "Inside foo..."
$obj->wow("Hello"); //this will print "Inside wow... text = Hello"
实现多个接口
一个类可以通过使用逗号分隔它们来实现多个接口。
在下面的示例中,我们有两个接口ISample和IHappy,以及一个实现这两个接口的类Po。
//interfaces
interface ISample {
public function foo();
}
interface IHappy {
public function wow();
}
//class implementing the interfaces
class Po implements ISample, IHappy {
//implementing interface methods
public function foo() {
printf("Inside foo...");
}
public function wow() {
printf("Inside wow...");
}
}
//creating object of Po
$obj = new Po();
$obj->foo(); //this prints "Inside foo..."
$obj->wow(); //this prints "Inside wow..."
接口可以扩展其他接口
我们可以使用extends关键字来扩展(继承)接口。
在下面的示例接口ISample中扩展了IHappy,而类Po实现了IHappy接口。
interface ISample {
public function foo();
}
interface IHappy extends ISample {
public function wow();
}
//class implementing the interface
class Po implements IHappy {
public function foo() {
printf("inside foo...");
}
public function wow() {
printf("inside wow...");
}
}
接口的多重继承
一个接口可以通过用逗号分隔多个接口来继承它们。
在下面的示例中,我们有一个接口IDeveloper,该接口继承了两个接口IFrontend和IBackend。
然后我们有一个Po类,然后实现IDeveloper接口。
//interfaces
interface IFrontend {
public function f_end();
}
interface IBackend {
public function b_end();
}
//interface inheriting multiple interfaces
interface IDeveloper extends IFrontend, IBackend {
public function dev();
}
//class implementing interface
class Po implements IDeveloper {
public function f_end() {
printf("Inside f_end...");
}
public function b_end() {
printf("Inside b_end...");
}
public function dev() {
printf("Inside dev...");
}
}
常量接口
我们还可以在接口内部具有常量,但是不能在其他类和接口中覆盖它们。
在下面的示例中,我们有一个接口ISample,其常量为HAPPY_CODE。
我们有一个实现ISample的Po类。
//interface with constant
interface ISample {
const HAPPY_CODE = 10;
public function foo();
}
//class implements an interface
class Po implements ISample {
public function foo() {
printf("Constant HAPPY_CODE = %d", Po::HAPPY_CODE);
}
}
//creating object of Po
$obj = new Po();
$obj->foo(); //this will print "Constant HAPPY_CODE = 10"

