PHP接口大总结——大家都来丰富丰富这个知识点

接口

一、接口定义

interface interfaceName{

[..]

}
说明:
interface是定义接口的关键字。
interfaceName是接口名。

二、接口实现

class phpClass implements interfaceName1, interfaceName2, interfaceName3,…, interfaceNamen{

[..]

}

class phpClass extends Parent implements interfaceName1, interfaceName2, interfaceName3,…, interfaceNamen{

[..]

}
说明:
implements操作符后面的以逗号分隔的名称,是类phpClass所要实现的全部接口的接口名。
类phpClass应该实现所有接口中所有的方法,若有方法没有实现,则此类必须用abstract修饰。

三、接口常量
实例一:
<?php
interface interfaceName{

const constant = "常量 ";

}
echo interfaceName::constant;
?>

实例二:
<?php
interface interfaceName{

const constant = "常量 ";

}

class A implements interfaceName{

function test(){return interfaceName::constant;}

}
$obj=new A;
echo $obj::constant;
echo $obj->test();
?>

实例三:不能被覆盖
<?php
interface interfaceName{

const constant = "常量 ";

}

class A implements interfaceName{

//const constant = "A::常量 ";//error

}
?>

四、接口函数
实例一:不能带方法体,并且只能是公有的,用不用public修饰无所谓。
<?php
interface interfaceName{

function test1();
public function test2();
//protected function test3();//error
//private function test4();//error

}
?>
实例二:类A实现接口的所有函数
<?php
interface interfaceName{

function test1();
public function test2();

}

class A implements interfaceName{

function test1(){return "test1 ";}
public function test2(){return "test2 ";}

}
$obj=new A;
echo $obj->test1();
echo $obj->test2();
?>

实例三:类A不实现接口函数
<?php
interface interfaceName{

function test1();
public function test2();

}
abstract class A implements interfaceName{}
class B extends A{

function test1(){return "test1 ";}
public function test2(){return "test2 ";}

}
$obj=new B;
echo $obj->test1();
echo $obj->test2();
?>

五、接口静态函数
实例一:不能带方法体,并且只能是公有的,用不用public修饰无所谓。
<?php
interface interfaceName{

static function test1();
static public function test2();
//static protected function test3();//error
//static private function test4();//error

}
?>
实例二:类A实现接口的所有静态函数
<?php
interface interfaceName{

static function test1();
static public function test2();

}

class A implements interfaceName{

static function test1(){return "test1 ";}
static public function test2(){return "test2 ";}

}
echo A::test1();
echo A::test2();
?>

实例三:类A不实现接口静态函数
<?php
interface interfaceName{

static function test1();
static public function test2();

}
abstract class A implements interfaceName{}
class B extends A{

static function test1(){return "test1 ";}
static public function test2(){return "test2 ";}

}
echo B::test1();
echo B::test2();
?>

五、接口继承
实例一:接口单继承
<?php
interface interfaceName1{

function test1();

}

interface interfaceName2 extends interfaceName1{

function test2();

}

interface interfaceName3 extends interfaceName2{

function test3();

}

class A implements interfaceName3{

function test1(){return "test1 ";}
function test2(){return "test2 ";}
function test3(){return "test3 ";}

}
$obj=new A;
echo $obj->test1();
echo $obj->test2();
echo $obj->test3();
?>

实例二:接口多继承
<?php
interface interfaceName1{

function test1();

}

interface interfaceName2{

function test2();

}

interface interfaceName3 extends interfaceName1,interfaceName2{

function test3();

}

class A implements interfaceName3{

function test1(){return "test1 ";}
function test2(){return "test2 ";}
function test3(){return "test3 ";}

}
$obj=new A;
echo $obj->test1();
echo $obj->test2();
echo $obj->test3();
?>
这是我花了一天的时间自编自测所得,请大家丰富丰富吧

阅读 1.5k
推荐问题