PHP抽象类abstract 接口interface及实现implements


前言

本文就介绍了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>";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值