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"