PHP 面向对象高级:接口
一、抽象类和接口类的异同
对比:
抽象类 | 接口类 |
---|---|
类中至少有一个抽象方法,也可包含非抽象方法 | 类中全部为抽象方法,接口抽象方法为public,前面不用加abstract |
可以使用各种成员属性 | 只能使用成员属性为常量const |
共同点:
本身不能被实例化,必须继承或者引用
继承和引用后,抽象方法必须重载才能实例化
二、语法
抽象的关键字是abstract
,而接口的关键字是interface
interface 接口名称{
// 常量成员
// 抽象方法
}
继承接口,使用implements
关键字。
单继承:
class 类名 implements 接口一 {
// 实现所有接口中的抽象方法
}
多继承:
class 类名 extends 父类名 implements 接口一, 接口二, ..., 接口 n {
// 实现所有接口中的抽象方法
}
接口中所有的方法都是抽象方法
在使用 implements 关键字继承接口的同时,还可以使用 extends 关键字来继承一个类
接口不能进行实例化操作,所以要使用接口中的成员,就必须借助子类。
三、代码示例
<?php
interface Demo{
const NAME = '强子';
function fun1();
}
interface Test{
public function fun2();
}
class Father{
public function eating(){
echo '吃饭的光头强'.PHP_EOL;
}
}
class Study extends Father implements Demo,Test {
public function fun1(){
echo self::NAME.PHP_EOL;
}
public function fun2()
{
echo '写代码的光头强'.PHP_EOL;
}
}
$obj = new Study();
$obj -> fun1();//输出:强子
$obj -> fun2();//输出:写代码的光头强
$obj -> eating();//输出:吃饭的光头强
echo Demo::NAME;//输出:强子