PHP的接口有什么意义?
接口允许用户创建指定类必须实现的公共方法的程序,而无需涉及如何实现特定方法的复杂性和细节。它通常被称为下一级抽象。它类似于抽象方法,类似于抽象类。接口的定义就像定义类一样,但 class 关键字被 interface 关键字和函数原型代替。该接口不包含数据变量。该接口有助于确保为程序员的所有方法维护一种元数据。
在PHP,我们可以进行面向对象编程。这意味着我们可以使用面向对象的概念,例如创建类和对象、使用继承等。OOP 主要包含三种不同类型的继承。它们是:单继承、多继承和多级继承。现在, PHP支持单级和多级继承。 PHP不直接支持多重继承,但可以使用接口实现。所以, PHP接口的主要原因是实现多重继承。
在多重继承中,我们可以从两个或多个父类派生一个子类。下面是我们如何在PHP实现多重继承。
我们有以下三个不同的类:
class Circle {
public function draw(){
//
}
public function setRadius() {
//
}
}
class Square {
public function draw(){
//
}
}
class Rectangle {
public function draw(){
//
}
}
现在如上所示,我们在所有三个类draw() 中都有相同的函数,在类 Circle 中还有一个函数作为setRadius() 。现在我们创建了三个不同的接口并在我们的类中实现了它们,如下所示:
interface Shape {
public function draw();
}
interface Radius {
public function setRadius();
}
interface Main {
public function process();
}
class Circle implements Shape, Radius, Main {
public function draw(){
echo "Drawing Circle...";
}
public function setRadius() {
echo "Setting Radius...";
}
public function process() {
$this->setRadius();
$this->draw();
}
}
class Square implements Shape, Main {
public function draw(){
echo "Drawing Square...";
}
public function process() {
$this->draw();
}
}
class Rectangle implements Shape, Main {
public function draw(){
echo "Drawing Rectangle...";
}
public function process() {
$this->draw();
}
}
如上所示,我们在类中实现了不止一个接口。 Shape和Main接口在所有类中实现,但Radius接口仅在 Circle 类中实现。
然后是第四个名为DrawShape 的类,因为我们要在所有类中调用process()函数。 process()函数是调用该类中的所有函数。
class DrawShape {
public function newShape(Main $shape) {
return $shape->process();
}
}
例子:
";
}
public function setRadius() {
echo "Setting Radius...";
}
// To call all the functions in this class
public function process() {
$this->setRadius();
$this->draw();
}
}
class Square implements Shape, Main {
public function draw(){
echo "Drawing Square...";
echo "
";
}
// To call all the functions in this class
public function process() {
$this->draw();
}
}
class Rectangle implements Shape, Main {
public function draw(){
echo "Drawing Rectangle...";
echo "
";
}
// To call all the functions in this class
public function process() {
$this->draw();
}
}
class DrawShape {
public function newShape(Main $shape) {
return $shape->process();
}
}
// To Draw Circle
$shapeCircle = new Circle();
$drawCircle = new DrawShape();
$drawCircle->newShape($shapeCircle);
// To Draw Square
$shapeSquare = new Square();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeSquare);
// To Draw Rectangle
$shapeRectangle = new Rectangle();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeRectangle);
?>
输出: