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"