📜  PHP的接口有什么意义?

📅  最后修改于: 2022-05-13 01:54:11.230000             🧑  作者: Mango

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();
    }
}

如上所示,我们在类中实现了不止一个接口。 ShapeMain接口在所有类中实现,但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);    ?>

输出: