PHP 对象接口


简介

接口是面向对象编程的一个重要特性,它允许指定类需要实现的方法,而无需定义这些方法的具体实现方式。

PHP 通过 **interface** 关键字支持接口。接口类似于类,但其方法没有定义方法体。接口中的方法必须是 public 的。实现这些方法的继承类必须使用 **implements** 关键字而不是 extends 关键字进行定义,并且必须提供父接口中所有方法的实现。

语法

<?php
interface testinterface{
   public function testmethod();
}
class testclass implements testinterface{
   public function testmethod(){
      echo "implements interfce method";
   }
}
?>

实现类必须定义接口中的所有方法,否则 PHP 解析器会抛出异常。

示例

 在线演示

<?php
interface testinterface{
   public function test1();
   public function test2();
}
class testclass implements testinterface{
   public function test1(){
      echo "implements interface method";
   }
}
$obj=new testclass()
?>

输出

错误如下所示:

PHP Fatal error: Class testclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testinterface::test2)

可扩展接口

与普通类一样,接口也可以使用 **extends** 关键字进行继承。

在下面的示例中,父类有两个抽象方法,子类只重定义了其中一个。这会导致如下错误:

示例

<?php
interface testinterface{
   public function test1();
}
interface myinterface extends testinterface{
   public function test2();
}
class testclass implements myinterface{
   public function test1(){
      echo "implements test1 method";
   }
   public function test2(){
      echo "implements test2 method";
   }
}
?>

使用接口实现多重继承

PHP 不允许在 extends 子句中使用多个类。但是,可以通过让子类实现一个或多个接口来实现多重继承。

在下面的示例中, MyClass 扩展了 TestClass 并实现了 TestInterface 以实现多重继承。

示例

 在线演示

<?php
interface testinterface{
   public function test1();
}
class testclass{
   public function test2(){
      echo "this is test2 function in parent class
";    } } class myclass extends testclass implements testinterface{    public function test1(){       echo "implements test1 method
";    } } $obj=new myclass(); $obj->test1(); $obj->test2(); ?>

输出

这将产生以下输出:

implements test1 method
this is test2 function in parent class

接口示例

示例

 在线演示

<?php
interface shape{
   public function area();
}
class circle implements shape{
   private $rad;
   public function __construct(){
      $this->rad=5;
   }
   public function area(){
      echo "area of circle=" . M_PI*pow($this->rad,2) ."
";    } } class rectangle implements shape{    private $width;    private $height;    public function __construct(){       $this->width=20;       $this->height=10;    }    public function area(){       echo "area of rectangle=" . $this->width*$this->height ."
";    } } $c=new circle(); $c->area(); $r=new rectangle(); $r->area(); ?>

输出

以上脚本产生以下结果

area of circle=78.539816339745
area of rectangle=200

更新于: 2020-09-18

587 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告