PHP中的接口

php与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类只能继承一个父类。为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。

定义:

接口(interface)是抽象方法和静态常量定义的集合。

在PHP中,声明接口语法类似声明类,只不过使用关键词interface,interface 接口名{….}

规范:

接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。

在接口中的抽象方法只能是public的,默认也是public权限。

abstract和final修饰符也不能修饰接口中的抽象方法。

<?php
interface User{
    //public $name  用访问控制修饰符的属性 是报错的
    const GROUP =12;
    //抽象方法是不能有方法体
    public function t();
    //没有public修饰的方法默认为public
}

接口的实现和继承

接口的实现

使用implements来实现以个接口。一个类可以实现多个接口。只要使用逗号(,)将多个接口连接起来就可以。

<?php

interface User{
   function getName();
   function setName();
}
interface Demo{
    function Demo1();
}
class Person implements User{
    private $name;
    function   getName(){
        echo "My name is",$this->name,"<br/>";
    }
    function setName($name=''){//这里必须的有一个默认值
        $this->name = $name;
    }

}
//实现继承多个接口
class Stu implements User,Demo{
    private $name;
    function   getName(){
        echo "My name is",$this->name,"<br/>";
    }
    function setName($name=''){//这里必须的有一个默认值
        $this->name = $name;
    }
    function Demo1(){
        echo "Demo接口中的demo1方法";
    }

}
$lisi= new Person();
$lisi->setName('李四');
$lisi->getName();
$zhangsan= new stu();
$zhangsan ->setName('张三');
$zhangsan->getName();
$zhangsan->demo1();

一个类可以继承类并实现接口

<?php

interface User{
   function getName();
   function setName();
}

class AdminUser{
    public function pubNews(){
        echo "管理员发布新闻功能<br>";
    }
}
class CommonUser extends AdminUser implements User{
    private $name;

    function getName(){
        echo "my name is ",$this->name,"<br/>";
    }
    function setName($name=""){//实现接口的方法如果传变量必须给一个默认值
        $this->name=$name;
    }
    public function Age($age){
        echo "我的年龄是:".$age;
    }
}
$lisi = new CommonUser();
$lisi->setName('lisi');
$lisi->getName();
$lisi->age(25);

接口的继承

一个接口可以继承自另外的接口。要注意只有接口和接口之间使用继承关键字extends。

一个接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法。

类实现接口必须实现其抽象方法,使用实现关键字implements。

php中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口。

抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理。

<?php

interface User{
   function getName();
   function setName();
}
interface demo{
    function demo1();
}
//接口的多重继承
interface CommonUser extends User,demo{
    function text();
}
//类继承接口是必须实现方法的
class  Test implements CommonUser{
    function getName(){
    }
    function setName(){
    }
    function text(){
    }
    function demo1(){
        
    }
}
abstract class test1 implements CommonUser{
    //抽象类继承接口是可以不实现的
}
Last modification:January 6, 2020
如果觉得我的文章对你有用,请随意赞赏