接口
一、接口定义
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();
?>
这是我花了一天的时间自编自测所得,请大家丰富丰富吧