前言
本文就介绍了PHP抽象类和对象接口的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、抽象类abstract
- 定义为抽象的类不能被实例化。
- 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
- 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
- 子类继承抽象类时,必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类一样或者更为宽松。
//抽象类不能实例化
abstract class MyClass{
//类中有一个抽象方法,那么该类就必须定义为抽象类
public $var = "你好";
abstract public function MyFun($name);
//定义为抽象方法只能声明其调用方式(参数),不能定义其具体的功能实现
abstract protected function MyFun1();
}
class MyClass1 extends MyClass{
//子类继承抽象类时,必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类一样或者更为宽松
public function MyFun($name='')
{
return $this->var;
}
public function MyFun1($value='')
{
return $this->var;
}
}
$foo = new MyClass1();
echo $foo->MyFun();
一、对象接口interface及实现implements
- 指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
- 通过interface 关键字来定义的。
- 定义的所有方法都必须是公有。
- 使用 implements 操作符来实现接口。
- 类中必须实现接口中定义的所有方法,否则会报一个致命错误。
- 类可以实现多个接口,用逗号来分隔多个接口的名称。
- 接口也可以继承,通过使用 extends 操作符。
- 接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。
//通过interface 关键字来定义的
interface MyClass{
const STR = "你好"; //接口里定义的常量
//接口里面的方法必须是公有方法,且不需要定义这些方法的具体内容
public function MyFun($value='');
public function MyFun1($value='');
}
//接口MyClass1继承接口MyClass,如果继承的父类多个,可以这样写(interface A extends B,C,D)
interface MyClass1 extends MyClass{
public function MyFun2();
}
//通过implements来实现接口,必须实现接口中定义的所有方法
class MyClass2 implements MyClass1{
// const STR = "Hello World"; //子类或子接口不能覆盖常量,该句会报错
public function MyFun($value='')
{
return "接口实现MyClass中的MyFun()";
}
public function MyFun1($value='')
{
return "接口实现MyClass中的MyFun1()";
}
public function MyFun2($value='')
{
return "接口实现MyClass1中的MyFun2()";
}
}
$foo = new MyClass2();
echo $foo->MyFun() . "<br>";
echo $foo->MyFun1() . "<br>";
echo $foo->MyFun2() . "<br>";